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 28139)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 28140)
@@ -116,4 +116,18 @@
 				int idx = radarCats.get(cat);
 				if (dlg.node != null && (idx == radarCatBox.getSelectedIndex())) {
+					dlg.panelMain.mark.setCategory(cat);
+					dlg.panelMain.mark.testValid();
+				}
+			}
+		}
+	};
+	public JLabel functionLabel;
+	public JComboBox functionBox;
+	public EnumMap<Cat, Integer> functionss = new EnumMap<Cat, Integer>(Cat.class);
+	private ActionListener alfunctionBox = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			for (Cat cat : landCats.keySet()) {
+				int idx = landCats.get(cat);
+				if (dlg.node != null && (idx == landCatBox.getSelectedIndex())) {
 					dlg.panelMain.mark.setCategory(cat);
 					dlg.panelMain.mark.testValid();
@@ -227,21 +241,32 @@
 		add(getObjButton(landButton, 102, 0, 34, 32, "Landmark", Obj.LNDMRK));
 		add(getObjButton(platformButton, 136, 0, 34, 32, "Platform", Obj.OFSPLF));
-		add(getObjButton(vesselButton, 0, 35, 34, 32, "LightVessel", Obj.LITVES));
-		add(getObjButton(floatButton, 34, 35, 34, 32, "LightFloat", Obj.LITFLT));
-		add(getObjButton(trafficButton, 68, 35, 34, 32, "SSTraffic", Obj.SISTAT));
-		add(getObjButton(warningButton, 102, 35, 34, 32, "SSWarning", Obj.SISTAW));
-		add(getObjButton(coastguardButton, 0, 70, 34, 32, "CoastguardStation", Obj.CGUSTA));
-		add(getObjButton(pilotButton, 34, 70, 34, 32, "PilotBoarding", Obj.PILBOP));
-		add(getObjButton(rescueButton, 68, 70, 34, 32, "RescueStation", Obj.RSCSTA));
-		add(getObjButton(radioButton, 102, 70, 34, 32, "RadioStation", Obj.RDOSTA));
-		add(getObjButton(radarButton, 136, 70, 34, 32, "RadarStation", Obj.RADSTA));
+		add(getObjButton(vesselButton, 0, 32, 34, 32, "LightVessel", Obj.LITVES));
+		add(getObjButton(floatButton, 34, 32, 34, 32, "LightFloat", Obj.LITFLT));
+		add(getObjButton(trafficButton, 68, 32, 34, 32, "SSTraffic", Obj.SISTAT));
+		add(getObjButton(warningButton, 102, 32, 34, 32, "SSWarning", Obj.SISTAW));
+		add(getObjButton(coastguardButton, 0, 64, 34, 32, "CoastguardStation", Obj.CGUSTA));
+		add(getObjButton(pilotButton, 34, 64, 34, 32, "PilotBoarding", Obj.PILBOP));
+		add(getObjButton(rescueButton, 68, 64, 34, 32, "RescueStation", Obj.RSCSTA));
+		add(getObjButton(radioButton, 102, 64, 34, 32, "RadioStation", Obj.RDOSTA));
+		add(getObjButton(radarButton, 136, 64, 34, 32, "RadarStation", Obj.RADSTA));
+
+		functionLabel = new JLabel(Messages.getString("Function"), SwingConstants.CENTER);
+		functionLabel.setBounds(new Rectangle(5, 94, 160, 18));
+		add(functionLabel);
+		functionLabel.setVisible(true);
+
+		functionBox = new JComboBox();
+		functionBox.setBounds(new Rectangle(5, 110, 160, 18));
+		add(functionBox);
+		functionBox.addActionListener(alfunctionBox);
+		functionBox.setVisible(true);
 
 		categoryLabel = new JLabel(Messages.getString("Category"), SwingConstants.CENTER);
-		categoryLabel.setBounds(new Rectangle(5, 110, 160, 20));
+		categoryLabel.setBounds(new Rectangle(5, 125, 160, 18));
 		add(categoryLabel);
 		categoryLabel.setVisible(false);
 
 		landCatBox = new JComboBox();
-		landCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		landCatBox.setBounds(new Rectangle(5, 142, 160, 18));
 		add(landCatBox);
 		landCatBox.addActionListener(alLandCatBox);
@@ -269,5 +294,5 @@
 
 		trafficCatBox = new JComboBox();
-		trafficCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		trafficCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(trafficCatBox);
 		trafficCatBox.addActionListener(alTrafficCatBox);
@@ -286,5 +311,5 @@
 
 		warningCatBox = new JComboBox();
-		warningCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		warningCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(warningCatBox);
 		warningCatBox.addActionListener(alWarningCatBox);
@@ -308,5 +333,5 @@
 
 		platformCatBox = new JComboBox();
-		platformCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		platformCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(platformCatBox);
 		platformCatBox.addActionListener(alPlatformCatBox);
@@ -325,5 +350,5 @@
 
 		pilotCatBox = new JComboBox();
-		pilotCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		pilotCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(pilotCatBox);
 		pilotCatBox.addActionListener(alPilotCatBox);
@@ -335,5 +360,5 @@
 
 		rescueCatBox = new JComboBox();
-		rescueCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		rescueCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(rescueCatBox);
 		rescueCatBox.addActionListener(alRescueCatBox);
@@ -352,5 +377,5 @@
 
 		radioCatBox = new JComboBox();
-		radioCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		radioCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(radioCatBox);
 		radioCatBox.addActionListener(alRadioCatBox);
@@ -377,5 +402,5 @@
 
 		radarCatBox = new JComboBox();
-		radarCatBox.setBounds(new Rectangle(5, 130, 160, 20));
+		radarCatBox.setBounds(new Rectangle(5, 140, 160, 20));
 		add(radarCatBox);
 		radarCatBox.addActionListener(alRadarCatBox);
@@ -386,8 +411,8 @@
 
 		chLabel = new JLabel("Ch:", SwingConstants.CENTER);
-		chLabel.setBounds(new Rectangle(140, 34, 30, 15));
+		chLabel.setBounds(new Rectangle(140, 32, 30, 15));
 		add(chLabel);
 		chBox = new JTextField();
-		chBox.setBounds(new Rectangle(140, 48, 30, 20));
+		chBox.setBounds(new Rectangle(140, 45, 30, 20));
 		chBox.setHorizontalAlignment(SwingConstants.CENTER);
 		add(chBox);
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 28139)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 28140)
@@ -212,5 +212,5 @@
 		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,
-		LMK_CHMY, LMK_CARN, LMK_DSHA, LMK_FLGS, LMK_FLRS, LMK_MNMT, LMK_TOWR, LMK_WNDM, LMK_WTRT,
+		LMK_CHMY, LMK_CARN, LMK_DSHA, LMK_FLGS, LMK_FLRS, LMK_MNMT, LMK_TOWR, LMK_WNDM, LMK_WTRT, LMK_MNRT,
 		LMK_MAST, LMK_WNDS, LMK_CLMN, LMK_OBLK, LMK_STAT, LMK_CROS, LMK_DOME, LMK_SCNR, LMK_WNDL, LMK_SPIR,
 		OFP_OIL, OFP_PRD, OFP_OBS, OFP_ALP, OFP_SALM, OFP_MOR, OFP_ISL, OFP_FPSO, OFP_ACC, OFP_NCCB,
@@ -293,5 +293,5 @@
 		CatSTR.put(Cat.LMK_WTRT, "water_tower");
 		CatSTR.put(Cat.LMK_MAST, "mast");
-		CatSTR.put(Cat.LMK_WNDS, "wind_sock");
+		CatSTR.put(Cat.LMK_WNDS, "windsock");
 		CatSTR.put(Cat.LMK_CLMN, "column");
 		CatSTR.put(Cat.LMK_OBLK, "obelisk");
@@ -302,4 +302,5 @@
 		CatSTR.put(Cat.LMK_WNDL, "windmill");
 		CatSTR.put(Cat.LMK_SPIR, "spire");
+		CatSTR.put(Cat.LMK_MNRT, "minaret");
 		CatSTR.put(Cat.OFP_OIL, "oil");
 		CatSTR.put(Cat.OFP_PRD,  "production");
@@ -1072,4 +1073,65 @@
 	public void setRefl(Con con) {
 		reflectivity = con;
+	}
+
+	public enum Fnc {
+	  UNKFNC, HMO, CSTM, HLTH, HOSP, POFF, HOTEL, RWSTA, POLICE, WPOL, PILO, PILL, BANK, DCHQ, TRNS, FACT, PWRS, ADMIN, EDUC, CHCH, CHPL,
+	  TMPL, PGDA, SHSH, BTMP, MOSQ, MRBT, LOOK, COMS, TV, RADO, RADR, LSUP, MWAV, COOL, OBSV, TIMB, CLK, CTRL, AMOR, STAD, BUSS
+	}
+
+	public static final EnumMap<Fnc, String> FncSTR = new EnumMap<Fnc, String>(Fnc.class);
+	static {
+		FncSTR.put(Fnc.UNKFNC, "");
+		FncSTR.put(Fnc.HMO, "harbour-master");
+		FncSTR.put(Fnc.CSTM, "customs");
+		FncSTR.put(Fnc.HLTH, "health");
+		FncSTR.put(Fnc.HOSP, "hospital");
+		FncSTR.put(Fnc.POFF, "post_office");
+		FncSTR.put(Fnc.HOTEL, "hotel");
+		FncSTR.put(Fnc.RWSTA, "railway_station");
+		FncSTR.put(Fnc.POLICE, "police_station");
+		FncSTR.put(Fnc.WPOL, "water-police_station");
+		FncSTR.put(Fnc.PILO, "pilot_office");
+		FncSTR.put(Fnc.PILL, "pilot_lookout");
+		FncSTR.put(Fnc.BANK, "bank");
+		FncSTR.put(Fnc.DCHQ, "district_control");
+		FncSTR.put(Fnc.TRNS, "transit_shed");
+		FncSTR.put(Fnc.FACT, "factory");
+		FncSTR.put(Fnc.PWRS, "power_station");
+		FncSTR.put(Fnc.ADMIN, "administrative");
+		FncSTR.put(Fnc.EDUC, "educational");
+		FncSTR.put(Fnc.CHCH, "church");
+		FncSTR.put(Fnc.CHPL, "chapel");
+		FncSTR.put(Fnc.TMPL, "temple");
+		FncSTR.put(Fnc.PGDA, "pagoda");
+		FncSTR.put(Fnc.SHSH, "shinto_shrine");
+		FncSTR.put(Fnc.BTMP, "buddhist_temple");
+		FncSTR.put(Fnc.MOSQ, "mosque");
+		FncSTR.put(Fnc.MRBT, "marabout");
+		FncSTR.put(Fnc.LOOK, "lookout");
+		FncSTR.put(Fnc.COMS, "communication");
+		FncSTR.put(Fnc.TV, "television");
+		FncSTR.put(Fnc.RADO, "radio");
+		FncSTR.put(Fnc.RADR, "radar");
+		FncSTR.put(Fnc.LSUP, "light_support");
+		FncSTR.put(Fnc.MWAV, "microwave");
+		FncSTR.put(Fnc.COOL, "cooling");
+		FncSTR.put(Fnc.OBSV, "observation");
+		FncSTR.put(Fnc.TIMB, "time_ball");
+		FncSTR.put(Fnc.CLK, "clock");
+		FncSTR.put(Fnc.CTRL, "control");
+		FncSTR.put(Fnc.AMOR, "airship_mooring");
+		FncSTR.put(Fnc.STAD, "stadium");
+		FncSTR.put(Fnc.BUSS, "bus_station");
+	};
+
+	private Fnc function = Fnc.UNKFNC;
+
+	public Fnc getFunc() {
+		return function;
+	}
+
+	public void setFunc(Fnc fnc) {
+		function = fnc;
 	}
 
