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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages.properties	(revision 27413)
@@ -290,4 +290,16 @@
 NCCB=NCCB
 
+Dolphin=Dolphin
+DevDolphin=Deviation Dolphin
+Bollard=Bollard
+Wall=Tie-up Wall
+Post=Post/Pile
+Chain=Chain/Cable
+Rope=Shore Ropes
+Automatic=Automatic
+MooringBuoy=Mooring Buoy
+CALM=CALM Buoy
+SBM=SBM Buoy
+
 NotDecimal=Not a valid decimal string
 TooBig=Maximum value exceeded
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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_de.properties	(revision 27413)
@@ -290,4 +290,16 @@
 NCCB=NCCB
 
+Dolphin=Dolphin
+DevDolphin=Deviation Dolphin
+Bollard=Bollard
+Wall=Tie-up Wall
+Post=Post/Pile
+Chain=Chain/Cable
+Rope=Shore Ropes
+Automatic=Automatic
+MooringBuoy=Mooring Buoy
+CALM=CALM Buoy
+SBM=SBM Buoy
+
 NotDecimal=Kein korrekter Dezimalwert
 TooBig=Maximaler Wert überschritten
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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/msg/messages_en.properties	(revision 27413)
@@ -290,4 +290,16 @@
 NCCB=NCCB
 
+Dolphin=Dolphin
+DevDolphin=Deviation Dolphin
+Bollard=Bollard
+Wall=Tie-up Wall
+Post=Post/Pile
+Chain=Chain/Cable
+Rope=Shore Ropes
+Automatic=Automatic
+MooringBuoy=Mooring Buoy
+CALM=CALM Buoy
+SBM=SBM Buoy
+
 NotDecimal=Not a valid decimal string
 TooBig=Maximum value exceeded
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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 27413)
@@ -312,5 +312,4 @@
 			case PLF:
 				lightsButton.setBorderPainted(true);
-				topButton.setEnabled(false);
 				panelLights.setVisible(true);
 				panelLights.syncPanel();
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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 27413)
@@ -10,4 +10,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
+import oseam.seamarks.SeaMark;
 import oseam.seamarks.SeaMark.*;
 
@@ -24,4 +25,21 @@
 				if (dlg.node != null && (idx == categoryBox.getSelectedIndex()))
 					dlg.panelMain.mark.setCategory(cat);
+			}
+		}
+	};
+	public JComboBox mooringBox;
+	public EnumMap<Cat, Integer> moorings = new EnumMap<Cat, Integer>(Cat.class);
+	private ActionListener alMooringBox = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			for (Cat cat : moorings.keySet()) {
+				int idx = moorings.get(cat);
+				if (dlg.node != null && (idx == mooringBox.getSelectedIndex())) {
+					dlg.panelMain.mark.setCategory(cat);
+					if ((cat == Cat.INB_CALM) || (cat == Cat.INB_SBM)) {
+						dlg.panelMain.mark.setObject(Obj.BOYINB);
+					} else {
+						dlg.panelMain.mark.setObject(Obj.MORFAC);
+					}
+				}
 			}
 		}
@@ -82,4 +100,21 @@
 		}
 	};
+	public JToggleButton mooringButton = new JToggleButton(new ImageIcon(getClass().getResource("/images/MooringButton.png")));
+	private ActionListener alMooring = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			dlg.panelMain.mark.setObject(Obj.UNKOBJ);
+			dlg.panelMain.mark.setCategory(Cat.NOCAT);
+			syncPanel();
+			if (mooringButton.isSelected()) {
+				categoryBox.setVisible(false);
+				mooringBox.setVisible(true);
+				mooringButton.setBorderPainted(true);
+			} else {
+				mooringBox.setVisible(false);
+				categoryBox.setVisible(true);
+				mooringButton.setBorderPainted(false);
+			}
+		}
+	};
 
 	public PanelSpec(OSeaMAction dia) {
@@ -105,4 +140,5 @@
 		categoryBox.setBounds(new Rectangle(5, 120, 160, 20));
 		add(categoryBox);
+		categoryBox.setVisible(true);
 		categoryBox.addActionListener(alCategoryBox);
 		addCatItem("", Cat.NOCAT);
@@ -124,12 +160,55 @@
 		addCatItem(Messages.getString("FerryCross"), Cat.SPM_FRRY);
 		addCatItem(Messages.getString("Anchorage"), Cat.SPM_ANCH);
+		mooringBox = new JComboBox();
+		mooringBox.setBounds(new Rectangle(5, 120, 160, 20));
+		add(mooringBox);
+		mooringBox.setVisible(false);
+		mooringBox.addActionListener(alMooringBox);
+		addMorItem("", Cat.NOCAT);
+		addMorItem(Messages.getString("Dolphin"), Cat.MOR_DLPN);
+		addMorItem(Messages.getString("DevDolphin"), Cat.MOR_DDPN);
+		addMorItem(Messages.getString("Bollard"), Cat.MOR_BLRD);
+		addMorItem(Messages.getString("Wall"), Cat.MOR_WALL);
+		addMorItem(Messages.getString("Post"), Cat.MOR_POST);
+		addMorItem(Messages.getString("Chain"), Cat.MOR_CHWR);
+		addMorItem(Messages.getString("Rope"), Cat.MOR_ROPE);
+		addMorItem(Messages.getString("Automatic"), Cat.MOR_AUTO);
+		addMorItem(Messages.getString("MooringBuoy"), Cat.MOR_BUOY);
+		addMorItem(Messages.getString("CALM"), Cat.INB_CALM);
+		addMorItem(Messages.getString("SBM"), Cat.INB_SBM);
 
 		topmarkButton.setBounds(new Rectangle(136, 0, 34, 32));
+		topmarkButton.setToolTipText(Messages.getString("Topmark"));
 		topmarkButton.setBorder(BorderFactory.createLoweredBevelBorder());
 		topmarkButton.addActionListener(alTop);
 		add(topmarkButton);
+
+		mooringButton.setBounds(new Rectangle(136, 64, 34, 32));
+		mooringButton.setToolTipText(Messages.getString("Mooring"));
+		mooringButton.setBorder(BorderFactory.createLoweredBevelBorder());
+		mooringButton.addActionListener(alMooring);
+		add(mooringButton);
 	}
 
 	public void syncPanel() {
+		if (SeaMark.EntMAP.get(dlg.panelMain.mark.getObject()) == Ent.MOORING) {
+			mooringButton.setBorderPainted(true);
+			categoryBox.setVisible(false);
+			mooringBox.setVisible(true);
+			for (Cat cat : moorings.keySet()) {
+				int item = moorings.get(cat);
+				if (dlg.panelMain.mark.getCategory() == cat)
+					mooringBox.setSelectedIndex(item);
+			}
+		} else {
+			mooringButton.setBorderPainted(false);
+			mooringBox.setVisible(false);
+			categoryBox.setVisible(true);
+			for (Cat cat : categories.keySet()) {
+				int item = categories.get(cat);
+				if (dlg.panelMain.mark.getCategory() == cat)
+					categoryBox.setSelectedIndex(item);
+			}
+		}
 		for (Shp shp : shapes.keySet()) {
 			JRadioButton button = shapes.get(shp);
@@ -139,9 +218,4 @@
 				button.setBorderPainted(false);
 		}
-		for (Cat cat : categories.keySet()) {
-			int item = categories.get(cat);
-			if (dlg.panelMain.mark.getCategory() == cat)
-				categoryBox.setSelectedIndex(item);
-		}
 		topmarkButton.setBorderPainted(dlg.panelMain.mark.getTopmark() != Top.NOTOP);
 		topmarkButton.setSelected(dlg.panelMain.mark.getTopmark() != Top.NOTOP);
@@ -152,4 +226,9 @@
 		categories.put(cat, categoryBox.getItemCount());
 		categoryBox.addItem(str);
+	}
+
+	private void addMorItem(String str, Cat cat) {
+		moorings.put(cat, mooringBox.getItemCount());
+		mooringBox.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 27412)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 27413)
@@ -65,5 +65,5 @@
 		FLTCAR, FLTISD, FLTLAT, FLTSAW, FLTSPP,
 		LITMAJ, LITMIN, LITFLT, LITVES, LITHSE, LNDMRK,
-		MORFAC, SISTAW, SISTAT, OFSPLF
+		MORFAC, BOYINB, SISTAW, SISTAT, OFSPLF
 	}
 
@@ -92,4 +92,5 @@
 		ObjSTR.put(Obj.LITHSE, "landmark");
 		ObjSTR.put(Obj.MORFAC, "mooring");
+		ObjSTR.put(Obj.BOYINB, "buoy_installation");
 		ObjSTR.put(Obj.OFSPLF, "platform");
 		ObjSTR.put(Obj.SISTAW, "signal_station_warning");
@@ -157,4 +158,5 @@
 		EntMAP.put(Obj.LNDMRK, Ent.LIGHT);
 		EntMAP.put(Obj.MORFAC, Ent.MOORING);
+		EntMAP.put(Obj.BOYINB, Ent.MOORING);
 		EntMAP.put(Obj.OFSPLF, Ent.PLATFORM);
 		EntMAP.put(Obj.SISTAW, Ent.STATION);
@@ -191,4 +193,5 @@
 		GrpMAP.put(Obj.LNDMRK, Grp.LGT);
 		GrpMAP.put(Obj.MORFAC, Grp.SPP);
+		GrpMAP.put(Obj.BOYINB, Grp.SPP);
 		GrpMAP.put(Obj.OFSPLF, Grp.PLF);
 		GrpMAP.put(Obj.SISTAW, Grp.SIS);
@@ -201,5 +204,5 @@
 		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,
+		MOR_DLPN, MOR_DDPN, MOR_BLRD, MOR_WALL, MOR_POST, MOR_CHWR, MOR_ROPE, MOR_AUTO, MOR_BUOY, INB_CALM, INB_SBM,
 		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,
@@ -243,5 +246,9 @@
 		CatSTR.put(Cat.MOR_POST, "post");
 		CatSTR.put(Cat.MOR_CHWR, "chain");
+		CatSTR.put(Cat.MOR_ROPE, "shore_rope");
+		CatSTR.put(Cat.MOR_AUTO, "automatic");
 		CatSTR.put(Cat.MOR_BUOY, "buoy");
+		CatSTR.put(Cat.INB_CALM, "calm");
+		CatSTR.put(Cat.INB_SBM, "sbm");
 		CatSTR.put(Cat.SIS_PTCL, "control");
 		CatSTR.put(Cat.SIS_PTED, "entry");
@@ -1143,7 +1150,5 @@
 			dlg.panelMain.moreButton.setVisible(true);
 			dlg.panelMain.saveButton.setEnabled(true);
-			Ent ent = EntMAP.get(getObject());
-			dlg.panelMain.topButton.setEnabled((ent == Ent.BUOY)
-					|| (ent == Ent.BEACON) || (ent == Ent.LFLOAT));
+			dlg.panelMain.topButton.setEnabled(true);
 			dlg.panelMain.fogButton.setEnabled(true);
 			dlg.panelMain.radButton.setEnabled(true);
