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 26580)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties	(revision 26581)
@@ -118,4 +118,20 @@
 Pink=Pink
 
+UKPurpose=Unknown Purpose
+Warning=Warning
+Yachting=Yachting
+Outfall=Outfall
+ODAS=ODAS
+RecreationZone=Recreation Zone
+Mooring=Mooring
+LANBY=LANBY
+Leading=Leading
+Notice=Notice
+TSS=TSS
+FoulGround=Foul Ground
+FerryCross=Ferry Crossing
+Anchorage=Anchorage
+ChanSeparation=Channel Separation
+
 UKCategory=Unknown Category
 Traffic=Traffic Control
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 26580)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 26581)
@@ -167,4 +167,5 @@
 				}
 			}
+			checkValidity();
 		}
 	}
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 26580)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 26581)
@@ -17,6 +17,13 @@
 	public JLabel categoryLabel;
 	public JComboBox categoryBox;
+	public EnumMap<Cat, Integer> categories = new EnumMap<Cat, Integer>(Cat.class);
 	private ActionListener alCategoryBox = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
+			for (Cat cat : categories.keySet()) {
+				int idx = categories.get(cat);
+				if (dlg.mark != null && (idx == categoryBox.getSelectedIndex()))
+					dlg.mark.setCategory(cat);
+			}
+			checkValidity();
 		}
 	};
@@ -51,11 +58,5 @@
 					button.setBorderPainted(false);
 			}
-			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();
-			}
+			checkValidity();
 		}
 	};
@@ -88,18 +89,40 @@
 		this.add(categoryBox, null);
 		categoryBox.addActionListener(alCategoryBox);
-		categoryBox.addItem(Messages.getString("NoneSpecified"));
-		categoryBox.addItem(Messages.getString("General"));
-		categoryBox.addItem(Messages.getString("ChannelSeparation"));
-		categoryBox.addItem(Messages.getString("EntryProhibited"));
-		categoryBox.addItem(Messages.getString("Yachting"));
-		categoryBox.addItem(Messages.getString("Diving"));
-		categoryBox.addItem(Messages.getString("Anchorage"));
-		categoryBox.addItem(Messages.getString("Pipeline"));
-		categoryBox.addItem(Messages.getString("SpeedLimit"));
-		categoryBox.addItem(Messages.getString("FerryCrossing"));
-		categoryBox.addItem(Messages.getString("FoulGround"));
-		categoryBox.addItem(Messages.getString("UnknownPurpose"));
+		addCatItem(Messages.getString("UKPurpose"), Cat.SPM_UNKN);
+		addCatItem(Messages.getString("Warning"), Cat.SPM_WARN);
+		addCatItem(Messages.getString("ChanSeparation"), Cat.SPM_CHBF);
+		addCatItem(Messages.getString("Yachting"), Cat.SPM_YCHT);
+		addCatItem(Messages.getString("Cable"), Cat.SPM_CABL);
+		addCatItem(Messages.getString("Outfall"), Cat.SPM_OFAL);
+		addCatItem(Messages.getString("ODAS"), Cat.SPM_ODAS);
+		addCatItem(Messages.getString("RecreationZone"), Cat.SPM_RECN);
+		addCatItem(Messages.getString("Mooring"), Cat.SPM_MOOR);
+		addCatItem(Messages.getString("LANBY"), Cat.SPM_LNBY);
+		addCatItem(Messages.getString("Leading"), Cat.SPM_LDNG);
+		addCatItem(Messages.getString("Notice"), Cat.SPM_NOTC);
+		addCatItem(Messages.getString("TSS"), Cat.SPM_TSS);
+		addCatItem(Messages.getString("FoulGround"), Cat.SPM_FOUL);
+		addCatItem(Messages.getString("Diving"), Cat.SPM_DIVE);
+		addCatItem(Messages.getString("FerryCross"), Cat.SPM_FRRY);
+		addCatItem(Messages.getString("Anchorage"), Cat.SPM_ANCH);
 	}
 
+	private void checkValidity() {
+		if (dlg.mark != null) {
+			if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.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) {
@@ -118,4 +141,9 @@
 		} else
 			clearSelections();
+	}
+
+	private void addCatItem(String str, Cat cat) {
+		categories.put(cat, categoryBox.getItemCount());
+		categoryBox.addItem(str);
 	}
 
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 26580)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26581)
@@ -143,5 +143,6 @@
 		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,
+		SPM_UNKN, SPM_WARN, SPM_CHBF, SPM_YCHT, SPM_CABL, SPM_OFAL, SPM_ODAS, SPM_RECN,
+		SPM_MOOR, SPM_LNBY, SPM_LDNG, SPM_NOTC, SPM_TSS, SPM_FOUL, SPM_DIVE, SPM_FRRY, SPM_ANCH,
 		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,
@@ -160,4 +161,21 @@
 		CatSTR.put(Cat.CAM_SOUTH, "south");
 		CatSTR.put(Cat.CAM_WEST, "west");
+		CatSTR.put(Cat.SPM_UNKN, "unknown");
+		CatSTR.put(Cat.SPM_WARN, "warning");
+		CatSTR.put(Cat.SPM_CHBF, "channel_separation");
+		CatSTR.put(Cat.SPM_YCHT, "yachting");
+		CatSTR.put(Cat.SPM_CABL, "cable");
+		CatSTR.put(Cat.SPM_OFAL, "outfall");
+		CatSTR.put(Cat.SPM_ODAS, "ODAS");
+		CatSTR.put(Cat.SPM_RECN, "recreational");
+		CatSTR.put(Cat.SPM_MOOR, "mooring");
+		CatSTR.put(Cat.SPM_LNBY, "LANBY");
+		CatSTR.put(Cat.SPM_LDNG, "leading");
+		CatSTR.put(Cat.SPM_NOTC, "notice");
+		CatSTR.put(Cat.SPM_TSS, "TSS");
+		CatSTR.put(Cat.SPM_FOUL, "foul");
+		CatSTR.put(Cat.SPM_DIVE, "diving");
+		CatSTR.put(Cat.SPM_FRRY, "ferry");
+		CatSTR.put(Cat.SPM_ANCH, "anchorage");
 		CatSTR.put(Cat.MOR_DLPN, "dolphin");
 		CatSTR.put(Cat.MOR_DDPN, "deviation_dolphon");
