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 28143)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties	(revision 28144)
@@ -275,5 +275,16 @@
 RadarScanner=Radar Scanner
 Windmill=Windmill
-SpireMinaret=Spire/Minaret
+Spire=Spire
+Minaret=Minaret
+
+Function=Function
+Church=Church
+Chapel=Chapel
+Temple=Temple
+Pagoda=Pagoda
+ShintoShrine=Shinto Shrine
+BuddhistTemple=Buddhist Temple
+Mosque=Mosque
+Marabout=Marabout
 
 Platform=Platform
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_de.properties
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_de.properties	(revision 28143)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_de.properties	(revision 28144)
@@ -275,5 +275,16 @@
 RadarScanner=Radar Anlage
 Windmill=Windmühle
-SpireMinaret=Spitzer Turm/Minarett
+Spire=Spitzer Turm
+Minaret=Minarett
+
+Function=Function
+Church=Church
+Chapel=Chapel
+Temple=Temple
+Pagoda=Pagoda
+ShintoShrine=Shinto Shrine
+BuddhistTemple=Buddhist Temple
+Mosque=Mosque
+Marabout=Marabout
 
 Platform=Platform
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_en.properties
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_en.properties	(revision 28143)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_en.properties	(revision 28144)
@@ -275,5 +275,16 @@
 RadarScanner=Radar Scanner
 Windmill=Windmill
-SpireMinaret=Spire/Minaret
+Spire=Spire
+Minaret=Minaret
+
+Function=Function
+Church=Church
+Chapel=Chapel
+Temple=Temple
+Pagoda=Pagoda
+ShintoShrine=Shinto Shrine
+BuddhistTemple=Buddhist Temple
+Mosque=Mosque
+Marabout=Marabout
 
 Platform=Platform
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 28143)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 28144)
@@ -124,11 +124,11 @@
 	public JLabel functionLabel;
 	public JComboBox functionBox;
-	public EnumMap<Cat, Integer> functionss = new EnumMap<Cat, Integer>(Cat.class);
+	public EnumMap<Fnc, Integer> functions = new EnumMap<Fnc, Integer>(Fnc.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);
+			for (Fnc fnc : functions.keySet()) {
+				int idx = functions.get(fnc);
+				if (dlg.node != null && (idx == functionBox.getSelectedIndex())) {
+					dlg.panelMain.mark.setFunc(fnc);
 					dlg.panelMain.mark.testValid();
 				}
@@ -167,5 +167,8 @@
 				dlg.panelMain.mark.setShape(Shp.FLOAT);
 			else dlg.panelMain.mark.setShape(Shp.UNKSHP);
+			functionLabel.setVisible(false);
 			categoryLabel.setVisible(false);
+			functionLabel.setVisible(false);
+			functionBox.setVisible(false);
 			landCatBox.setVisible(false);
 			trafficCatBox.setVisible(false);
@@ -180,5 +183,7 @@
 			dlg.panelMain.mark.setCategory(Cat.NOCAT);
 			if (landButton.isSelected()) {
-				categoryLabel.setVisible(true);
+				functionLabel.setVisible(true);
+				categoryLabel.setVisible(true);
+				functionBox.setVisible(true);
 				landCatBox.setVisible(true);
 				alLandCatBox.actionPerformed(null);
@@ -254,5 +259,5 @@
 		functionLabel.setBounds(new Rectangle(5, 94, 160, 18));
 		add(functionLabel);
-		functionLabel.setVisible(true);
+		functionLabel.setVisible(false);
 
 		functionBox = new JComboBox();
@@ -260,5 +265,14 @@
 		add(functionBox);
 		functionBox.addActionListener(alfunctionBox);
-		functionBox.setVisible(true);
+		addLFItem("", Fnc.UNKFNC);
+		addLFItem(Messages.getString("Church"), Fnc.CHCH);
+		addLFItem(Messages.getString("Chapel"), Fnc.CHPL);
+		addLFItem(Messages.getString("Temple"), Fnc.TMPL);
+		addLFItem(Messages.getString("Pagoda"), Fnc.PGDA);
+		addLFItem(Messages.getString("ShintoShrine"), Fnc.SHSH);
+		addLFItem(Messages.getString("BuddhistTemple"), Fnc.BTMP);
+		addLFItem(Messages.getString("Mosque"), Fnc.MOSQ);
+		addLFItem(Messages.getString("Marabout"), Fnc.MRBT);
+		functionBox.setVisible(false);
 
 		categoryLabel = new JLabel(Messages.getString("Category"), SwingConstants.CENTER);
@@ -289,5 +303,6 @@
 		addLCItem(Messages.getString("RadarScanner"), Cat.LMK_SCNR);
 		addLCItem(Messages.getString("Windmill"), Cat.LMK_WNDL);
-		addLCItem(Messages.getString("SpireMinaret"), Cat.LMK_SPIR);
+		addLCItem(Messages.getString("Spire"), Cat.LMK_SPIR);
+		addLCItem(Messages.getString("Minaret"), Cat.LMK_MNRT);
 		addLCItem(Messages.getString("Cairn"), Cat.LMK_CARN);
 		landCatBox.setVisible(false);
@@ -421,4 +436,6 @@
 
 	public void syncPanel() {
+		functionLabel.setVisible(false);
+		functionBox.setVisible(false);
 		categoryLabel.setVisible(false);
 		landCatBox.setVisible(false);
@@ -433,7 +450,14 @@
 		chBox.setVisible(false);
 		chBox.setText(dlg.panelMain.mark.getChannel());
-		if ((dlg.panelMain.mark.getObject() == Obj.LNDMRK) && (dlg.panelMain.mark.getCategory() != Cat.NOCAT)) {
-			categoryLabel.setVisible(true);
+		if ((dlg.panelMain.mark.getObject() == Obj.LNDMRK) && ((dlg.panelMain.mark.getCategory() != Cat.NOCAT) || (dlg.panelMain.mark.getFunc() != Fnc.UNKFNC))) {
+			functionLabel.setVisible(true);
+			categoryLabel.setVisible(true);
+			functionBox.setVisible(true);
 			landCatBox.setVisible(true);
+			for (Fnc fnc : functions.keySet()) {
+				int item = functions.get(fnc);
+				if (dlg.panelMain.mark.getFunc() == fnc)
+					functionBox.setSelectedIndex(item);
+			}
 			for (Cat cat : landCats.keySet()) {
 				int item = landCats.get(cat);
@@ -553,4 +577,9 @@
 		radarCats.put(cat, radarCatBox.getItemCount());
 		radarCatBox.addItem(str);
+	}
+
+	private void addLFItem(String str, Fnc fnc) {
+		functions.put(fnc, functionBox.getItemCount());
+		functionBox.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 28143)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 28144)
@@ -114,4 +114,5 @@
 		if (obj == Obj.UNKOBJ) {
 			setCategory(Cat.NOCAT);
+			setFunc(Fnc.UNKFNC);
 			setShape(Shp.UNKSHP);
 			setColour(Ent.BODY, Col.UNKCOL);
@@ -299,5 +300,5 @@
 		CatSTR.put(Cat.LMK_CROS, "cross");
 		CatSTR.put(Cat.LMK_DOME, "dome");
-		CatSTR.put(Cat.LMK_SCNR, "radar");
+		CatSTR.put(Cat.LMK_SCNR, "radar_scanner");
 		CatSTR.put(Cat.LMK_WNDL, "windmill");
 		CatSTR.put(Cat.LMK_SPIR, "spire");
@@ -1134,4 +1135,5 @@
 	public void setFunc(Fnc fnc) {
 		function = fnc;
+		repaint();
 	}
 
@@ -1262,5 +1264,5 @@
 			break;
 		case LNDMRK:
-			if (getCategory() != Cat.NOCAT)
+			if ((getCategory() != Cat.NOCAT) || (getFunc() != Fnc.UNKFNC))
 				tmp = true;
 			break;
@@ -1453,5 +1455,17 @@
 		}
 
-		if ((getObject() == Obj.LNDMRK) && (getCategory() == Cat.NOCAT)) {
+		for (Obj obj : ObjSTR.keySet()) {
+			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":function")) {
+				str = keys.get("seamark:" + ObjSTR.get(obj) + ":function");
+				setFunc(Fnc.UNKFNC);
+				for (Fnc fnc : FncSTR.keySet()) {
+					if (FncSTR.get(fnc).equals(str)) {
+						setFunc(fnc);
+					}
+				}
+			}
+		}
+
+		if ((getObject() == Obj.LNDMRK) && (getCategory() == Cat.NOCAT) && (getFunc() == Fnc.UNKFNC)) {
 			setObject(Obj.LITHSE);
 		}
@@ -1994,4 +2008,7 @@
 					break;
 				case LMK_MNMT:
+				case LMK_CLMN:
+				case LMK_OBLK:
+				case LMK_STAT:
 					imgStr += "Monument";
 					break;
@@ -2000,5 +2017,8 @@
 					break;
 				case LMK_TOWR:
-					imgStr += "LandTower";
+					if ((getFunc() == Fnc.CHCH) || (getFunc() == Fnc.CHPL))
+						imgStr += "ChurchTower";
+					else
+						imgStr += "LandTower";
 					break;
 				case LMK_WNDM:
@@ -2008,4 +2028,50 @@
 					imgStr += "WaterTower";
 					break;
+				case LMK_DOME:
+					if ((getFunc() == Fnc.CHCH) || (getFunc() == Fnc.CHPL))
+						imgStr += "ChurchDome";
+					else
+						imgStr += "Dome";
+					break;
+				case LMK_SPIR:
+					if ((getFunc() == Fnc.CHCH) || (getFunc() == Fnc.CHPL))
+						imgStr += "ChurchSpire";
+					else
+						imgStr += "Spire";
+					break;
+				case LMK_MNRT:
+					imgStr += "Minaret";
+					break;
+				case LMK_WNDS:
+					imgStr += "Windsock";
+					break;
+				case LMK_CROS:
+					imgStr += "Cross";
+					break;
+				case LMK_SCNR:
+					imgStr += "Signal_Station";
+					break;
+				case LMK_WNDL:
+					imgStr += "Windmill";
+					break;
+				case NOCAT:
+					switch (getFunc()) {
+					case CHCH:
+					case CHPL:
+						imgStr += "Church";
+						break;
+					case TMPL:
+					case PGDA:
+					case SHSH:
+					case BTMP:
+						imgStr += "Temple";
+						break;
+					case MOSQ:
+						imgStr += "Minaret";
+						break;
+					case MRBT:
+						imgStr += "Spire";
+						break;
+					}
 				}
 				break;
@@ -2455,4 +2521,8 @@
 				if (getObjPattern() != Pat.NOPAT) {
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatSTR.get(getObjPattern())));
+				}
+
+				if (getFunc() != Fnc.UNKFNC) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":function", FncSTR.get(getFunc())));
 				}
 
