Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties	(revision 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties	(revision 26579)
@@ -118,5 +118,29 @@
 Pink=Pink
 
+UKCategory=Unknown Category
+Traffic=Traffic Control
+PortControl=Port Control
+PortEntry=Port Entry/Departure
+IPT=International Port Traffic
+Berthing=Berthing
+Dock=Dock
 Lock=Lock
+Barrage=Flood Barrage
+Bridge=Bridge Passage
+Dredging=Dredging
+Danger=Danger
 Storm=Storm
+Weather=Weather
+Obstruction=Obstruction
+Cable=Cable
+Distress=Distress
+Time=time
+Tide=Tide
+TidalStream=Tidal Stream
+TideGauge=Tide Gauge
+TideScale=Tide Scale
+Diving=Diving
+Ice=Ice
+LevelGauge=Water Level Gauge
+Military=Military Practice
 
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26579)
@@ -112,5 +112,8 @@
 			}
 			if (dlg.mark != null) {
-				dlg.panelMain.moreButton.setVisible(true);
+				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN))
+					dlg.panelMain.moreButton.setVisible(true);
+				else
+					dlg.panelMain.moreButton.setVisible(false);
 				dlg.mark.paintSign();
 			}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 26579)
@@ -15,16 +15,30 @@
 
 	private OSeaMAction dlg;
-	
+
 	public JLabel categoryLabel;
 
 	public JComboBox trafficCatBox;
+	public EnumMap<Cat, Integer> trafficCats = new EnumMap<Cat, Integer>(Cat.class);
 	private ActionListener alTrafficCatBox = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
+			for (Cat cat : trafficCats.keySet()) {
+				int idx = trafficCats.get(cat);
+				if (dlg.mark != null && (idx == trafficCatBox.getSelectedIndex()))
+					dlg.mark.setCategory(cat);
+			}
+			checkValidity();
 		}
 	};
 
 	public JComboBox warningCatBox;
+	public EnumMap<Cat, Integer> warningCats = new EnumMap<Cat, Integer>(Cat.class);
 	private ActionListener alWarningCatBox = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
+			for (Cat cat : warningCats.keySet()) {
+				int idx = warningCats.get(cat);
+				if (dlg.mark != null && (idx == warningCatBox.getSelectedIndex()))
+					dlg.mark.setCategory(cat);
+			}
+			checkValidity();
 		}
 	};
@@ -62,8 +76,5 @@
 				warningCatBox.setVisible(false);
 			}
-			if (dlg.mark != null) {
-				dlg.panelMain.moreButton.setVisible(true);
-				dlg.mark.paintSign();
-			}
+			checkValidity();
 		}
 	};
@@ -81,32 +92,100 @@
 
 		categoryLabel = new JLabel(Messages.getString("SSCategory"), SwingConstants.CENTER);
-		categoryLabel.setBounds(new Rectangle(20, 80, 140, 20));
+		categoryLabel.setBounds(new Rectangle(10, 80, 160, 20));
 		this.add(categoryLabel, null);
 		categoryLabel.setVisible(false);
-		
+
 		trafficCatBox = new JComboBox();
-		trafficCatBox.setBounds(new Rectangle(20, 100, 140, 20));
+		trafficCatBox.setBounds(new Rectangle(10, 100, 160, 20));
 		this.add(trafficCatBox, null);
 		trafficCatBox.addActionListener(alTrafficCatBox);
-		trafficCatBox.addItem(Messages.getString("UKCategory"));
-		trafficCatBox.addItem(Messages.getString("Lock"));
+		addTCItem(Messages.getString("UKCategory"), Cat.UNKNOWN);
+		addTCItem(Messages.getString("Traffic"), Cat.SIS_TRFC);
+		addTCItem(Messages.getString("PortControl"), Cat.SIS_PTCL);
+		addTCItem(Messages.getString("PortEntry"), Cat.SIS_PTED);
+		addTCItem(Messages.getString("IPT"), Cat.SIS_IPT);
+		addTCItem(Messages.getString("Berthing"), Cat.SIS_BRTH);
+		addTCItem(Messages.getString("Dock"), Cat.SIS_DOCK);
+		addTCItem(Messages.getString("Lock"), Cat.SIS_LOCK);
+		addTCItem(Messages.getString("Barrage"), Cat.SIS_FBAR);
+		addTCItem(Messages.getString("Bridge"), Cat.SIS_BRDG);
+		addTCItem(Messages.getString("Dredging"), Cat.SIS_DRDG);
 		trafficCatBox.setVisible(false);
 
 		warningCatBox = new JComboBox();
-		warningCatBox.setBounds(new Rectangle(20, 100, 140, 20));
+		warningCatBox.setBounds(new Rectangle(10, 100, 160, 20));
 		this.add(warningCatBox, null);
 		warningCatBox.addActionListener(alWarningCatBox);
-		warningCatBox.addItem(Messages.getString("UKCategory"));
-		warningCatBox.addItem(Messages.getString("Storm"));
+		addWCItem(Messages.getString("UKCategory"), Cat.UNKNOWN);
+		addWCItem(Messages.getString("Danger"), Cat.SIS_DNGR);
+		addWCItem(Messages.getString("Storm"), Cat.SIS_STRM);
+		addWCItem(Messages.getString("Weather"), Cat.SIS_WTHR);
+		addWCItem(Messages.getString("Obstruction"), Cat.SIS_OBST);
+		addWCItem(Messages.getString("Cable"), Cat.SIS_CABL);
+		addWCItem(Messages.getString("Distress"), Cat.SIS_DSTR);
+		addWCItem(Messages.getString("Time"), Cat.SIS_TIME);
+		addWCItem(Messages.getString("Tide"), Cat.SIS_TIDE);
+		addWCItem(Messages.getString("TidalStream"), Cat.SIS_TSTM);
+		addWCItem(Messages.getString("TideGauge"), Cat.SIS_TGAG);
+		addWCItem(Messages.getString("TideScale"), Cat.SIS_TSCL);
+		addWCItem(Messages.getString("Diving"), Cat.SIS_DIVE);
+		addWCItem(Messages.getString("Ice"), Cat.SIS_ICE);
+		addWCItem(Messages.getString("LevelGauge"), Cat.SIS_LGAG);
+		addWCItem(Messages.getString("Military"), Cat.SIS_MILY);
 		warningCatBox.setVisible(false);
 
 	}
 
+	private void checkValidity() {
+		if (dlg.mark != null) {
+			if (dlg.mark.getObject() != Obj.UNKNOWN) {
+				dlg.panelMain.fogButton.setEnabled(true);
+				dlg.panelMain.radButton.setEnabled(true);
+				dlg.panelMain.litButton.setEnabled(true);
+				dlg.panelMain.moreButton.setVisible(true);
+			} else {
+				dlg.panelMain.fogButton.setEnabled(false);
+				dlg.panelMain.radButton.setEnabled(false);
+				dlg.panelMain.litButton.setEnabled(false);
+				dlg.panelMain.moreButton.setVisible(false);
+			}
+			dlg.mark.paintSign();
+		}
+	}
+	
+	public void updateSelections() {
+		if (dlg.mark != null) {
+			if (dlg.mark.getObject() == Obj.UNKNOWN) {
+				clearSelections();
+			} else {
+				objects.get(dlg.mark.getObject()).doClick();
+				if (dlg.mark.getObject() == Obj.SISTAT) {
+					trafficCatBox.setSelectedIndex(trafficCats.get(dlg.mark.getCategory()));
+				}
+				if (dlg.mark.getObject() == Obj.SISTAW) {
+					warningCatBox.setSelectedIndex(warningCats.get(dlg.mark.getCategory()));
+				}
+			}
+		}
+	}
+
 	public void clearSelections() {
+		warningCatBox.setSelectedIndex(0);
+		trafficCatBox.setSelectedIndex(0);
 		objButtons.clearSelection();
 		alObj.actionPerformed(null);
 	}
 
-	private JRadioButton getObjButton(JRadioButton button, int x, int y, int w, int h, String tip,Obj obj) {
+	private void addTCItem(String str, Cat cat) {
+		trafficCats.put(cat, trafficCatBox.getItemCount());
+		trafficCatBox.addItem(str);
+	}
+
+	private void addWCItem(String str, Cat cat) {
+		warningCats.put(cat, warningCatBox.getItemCount());
+		warningCatBox.addItem(str);
+	}
+
+	private JRadioButton getObjButton(JRadioButton button, int x, int y, int w, int h, String tip, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 26579)
@@ -135,20 +135,7 @@
 				}
 				if (specButton.isSelected()) {
-					if (dlg.mark != null) {
-						if (dlg.mark.getObject() == Obj.UNKNOWN) {
-							panelSpec.clearSelections();
-							panelSpec.panelCol.yellowButton.doClick();
-						} else {
-							panelSpec.panelCol.colours.get(dlg.mark.getColour(Ent.BODY, 0)).doClick();
-						}
-						if (panelSpec.shapes.containsKey(dlg.mark.getShape())) {
-							panelSpec.shapes.get(dlg.mark.getShape()).doClick();
-						} else {
-							panelSpec.shapeButtons.clearSelection();
-							panelSpec.alShape.actionPerformed(null);
-						}
-					}
 					specButton.setBorderPainted(true);
 					panelSpec.setVisible(true);
+					panelSpec.updateSelections();
 				} else {
 					specButton.setBorderPainted(false);
@@ -157,13 +144,7 @@
 				}
 				if (lightsButton.isSelected()) {
-					if (dlg.mark != null) {
-						if (dlg.mark.getObject() == Obj.UNKNOWN) {
-							panelLights.clearSelections();
-						} else {
-							panelLights.objects.get(dlg.mark.getObject()).doClick();
-						}
-					}
 					lightsButton.setBorderPainted(true);
 					panelLights.setVisible(true);
+					panelLights.updateSelections();
 				} else {
 					lightsButton.setBorderPainted(false);
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26579)
@@ -90,5 +90,8 @@
 			}
 			if (dlg.mark != null) {
-				dlg.panelMain.moreButton.setVisible(true);
+				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN))
+					dlg.panelMain.moreButton.setVisible(true);
+				else
+					dlg.panelMain.moreButton.setVisible(false);
 				dlg.mark.paintSign();
 			}
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26579)
@@ -32,6 +32,11 @@
 					button.setBorderPainted(false);
 			}
-			if (dlg.mark != null)
+			if (dlg.mark != null) {
+				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN))
+					dlg.panelMain.moreButton.setVisible(true);
+				else
+					dlg.panelMain.moreButton.setVisible(false);
 				dlg.mark.paintSign();
+			}
 		}
 	};
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 26579)
@@ -52,5 +52,8 @@
 			}
 			if (dlg.mark != null) {
-				dlg.panelMain.moreButton.setVisible(true);
+				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN))
+					dlg.panelMain.moreButton.setVisible(true);
+				else
+					dlg.panelMain.moreButton.setVisible(false);
 				dlg.mark.paintSign();
 			}
@@ -99,4 +102,22 @@
 	}
 
+	public void updateSelections() {
+		if (dlg.mark != null) {
+			if (dlg.mark.getObject() == Obj.UNKNOWN) {
+				clearSelections();
+				panelCol.yellowButton.doClick();
+			} else {
+				panelCol.colours.get(dlg.mark.getColour(Ent.BODY, 0)).doClick();
+			}
+			if (shapes.containsKey(dlg.mark.getShape())) {
+				shapes.get(dlg.mark.getShape()).doClick();
+			} else {
+				shapeButtons.clearSelection();
+				alShape.actionPerformed(null);
+			}
+		} else
+			clearSelections();
+	}
+
 	public void clearSelections() {
 		shapeButtons.clearSelection();
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26579)
@@ -90,5 +90,8 @@
 			}
 			if (dlg.mark != null) {
-				dlg.panelMain.moreButton.setVisible(true);
+				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN))
+					dlg.panelMain.moreButton.setVisible(true);
+				else
+					dlg.panelMain.moreButton.setVisible(false);
 				dlg.mark.paintSign();
 			}
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 26578)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26579)
@@ -140,5 +140,12 @@
 
 	public enum Cat {
-		UNKNOWN, LAM_PORT, LAM_STBD, LAM_PPORT, LAM_PSTBD, CAM_NORTH, CAM_EAST, CAM_SOUTH, CAM_WEST, ACH_URST, ACH_DEEP, ACH_TANK, ACH_EXPL, ACH_QUAR, ACH_SPLN, ACH_SCAN, ACH_SCMO, ACH_T24H, ACH_TLIM, SPM_CHBF, SPM_YCHT, MOR_DLPN, MOR_DDPN, MOR_BLRD, MOR_WALL, MOR_POST, MOR_CHWR, MOR_BUOY, SIS_DOCK, SIS_LOCK, SIS_STRM, SIS_TIDE, LIT_DIRF, LIT_LEDG
+		UNKNOWN, LAM_PORT, LAM_STBD, LAM_PPORT, LAM_PSTBD,
+		CAM_NORTH, CAM_EAST, CAM_SOUTH, CAM_WEST,
+		ACH_URST, ACH_DEEP, ACH_TANK, ACH_EXPL, ACH_QUAR, ACH_SPLN, ACH_SCAN, ACH_SCMO, ACH_T24H, ACH_TLIM,
+		SPM_CHBF, SPM_YCHT,
+		MOR_DLPN, MOR_DDPN, MOR_BLRD, MOR_WALL, MOR_POST, MOR_CHWR, MOR_BUOY,
+		SIS_PTCL, SIS_PTED, SIS_IPT, SIS_BRTH, SIS_DOCK, SIS_LOCK, SIS_FBAR, SIS_BRDG, SIS_DRDG, SIS_TRFC,
+		SIS_DNGR, SIS_OBST, SIS_CABL, SIS_MILY, SIS_DSTR, SIS_WTHR, SIS_STRM, SIS_ICE, SIS_TIME, SIS_TIDE, SIS_TSTM, SIS_TGAG, SIS_TSCL, SIS_DIVE, SIS_LGAG,
+		LIT_DIRF, LIT_LEDG
 	}
 
@@ -153,5 +160,36 @@
 		CatSTR.put(Cat.CAM_SOUTH, "south");
 		CatSTR.put(Cat.CAM_WEST, "west");
+		CatSTR.put(Cat.MOR_DLPN, "dolphin");
+		CatSTR.put(Cat.MOR_DDPN, "deviation_dolphon");
+		CatSTR.put(Cat.MOR_BLRD, "bollard");
+		CatSTR.put(Cat.MOR_WALL, "wall");
+		CatSTR.put(Cat.MOR_POST, "post");
+		CatSTR.put(Cat.MOR_CHWR, "chain");
 		CatSTR.put(Cat.MOR_BUOY, "buoy");
+		CatSTR.put(Cat.SIS_PTCL, "control");
+		CatSTR.put(Cat.SIS_PTED, "entry");
+		CatSTR.put(Cat.SIS_IPT, "ipt");
+		CatSTR.put(Cat.SIS_BRTH, "berthing");
+		CatSTR.put(Cat.SIS_DOCK, "dock");
+		CatSTR.put(Cat.SIS_LOCK, "lock");
+		CatSTR.put(Cat.SIS_FBAR, "barrage");
+		CatSTR.put(Cat.SIS_BRDG, "bridge");
+		CatSTR.put(Cat.SIS_DRDG, "dredging");
+		CatSTR.put(Cat.SIS_TRFC, "traffic");
+		CatSTR.put(Cat.SIS_DNGR, "danger");
+		CatSTR.put(Cat.SIS_OBST, "obstruction");
+		CatSTR.put(Cat.SIS_CABL, "cable");
+		CatSTR.put(Cat.SIS_MILY, "military");
+		CatSTR.put(Cat.SIS_DSTR, "distress");
+		CatSTR.put(Cat.SIS_WTHR, "weather");
+		CatSTR.put(Cat.SIS_STRM, "storm");
+		CatSTR.put(Cat.SIS_ICE, "ice");
+		CatSTR.put(Cat.SIS_TIME, "time");
+		CatSTR.put(Cat.SIS_TIDE, "tide");
+		CatSTR.put(Cat.SIS_TSTM, "stream");
+		CatSTR.put(Cat.SIS_TGAG, "gauge");
+		CatSTR.put(Cat.SIS_TSCL, "scale");
+		CatSTR.put(Cat.SIS_DIVE, "diving");
+		CatSTR.put(Cat.SIS_LGAG, "level");
 	}
 
