Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 24801)
@@ -116,4 +116,6 @@
 			return;
 		}
+		
+		mark = null;
 
 		Iterator<Node> it = selection.iterator();
@@ -127,34 +129,21 @@
 		if (keys.containsKey("seamark:type"))
 			type = keys.get("seamark:type");
-
 		if (type.equals("buoy_lateral") || type.equals("beacon_lateral")) {
 			mark = new MarkLat(this, node);
-			return;
-
 		} else if (type.equals("buoy_cardinal")
 				|| type.equals("beacon_cardinal")) {
 			mark = new MarkCard(this, node);
-			return;
-
 		} else if (type.equals("buoy_safe_water")
 				|| type.equals("beacon_safe_water")) {
 			mark = new MarkSaw(this, node);
-			return;
-
 		} else if (type.equals("buoy_special_purpose")
 				|| type.equals("beacon_special_purpose")) {
 			mark = new MarkSpec(this, node);
-			return;
-
 		} else if (type.equals("buoy_isolated_danger")
 				|| type.equals("beacon_isolated_danger")) {
 			mark = new MarkIsol(this, node);
-			return;
-
 		} else if (type.equals("landmark") || type.equals("light_vessel")
 				|| type.equals("light_major") || type.equals("light_minor")) {
 			mark = new MarkLight(this, node);
-			return;
-
 		} else if (type.equals("light_float")) {
 			if (keys.containsKey("seamark:light_float:colour")) {
@@ -164,5 +153,4 @@
 						|| str.equals("green;red;green")) {
 					mark = new MarkLat(this, node);
-					return;
 				} else if (str.equals("black;yellow")
 						|| str.equals("black;yellow;black")
@@ -170,14 +158,10 @@
 						|| str.equals("yellow;black;yellow")) {
 					mark = new MarkCard(this, node);
-					return;
 				} else if (str.equals("black;red;black")) {
 					mark = new MarkIsol(this, node);
-					return;
 				} else if (str.equals("red;white")) {
 					mark = new MarkSaw(this, node);
-					return;
 				} else if (str.equals("yellow")) {
 					mark = new MarkSpec(this, node);
-					return;
 				}
 			} else if (keys.containsKey("seamark:light_float:topmark:shape")) {
@@ -185,5 +169,4 @@
 				if (str.equals("cylinder") || str.equals("cone, point up")) {
 					mark = new MarkLat(this, node);
-					return;
 				}
 			} else if (keys.containsKey("seamark:light_float:topmark:colour")) {
@@ -191,79 +174,59 @@
 				if (str.equals("red") || str.equals("green")) {
 					mark = new MarkLat(this, node);
-					return;
 				}
 			}
-		}
-
-		if (keys.containsKey("buoy_lateral:category")
+		} else if (keys.containsKey("buoy_lateral:category")
 				|| keys.containsKey("beacon_lateral:category")) {
 			mark = new MarkLat(this, node);
-			return;
 		} else if (keys.containsKey("buoy_cardinal:category")
 				|| keys.containsKey("beacon_cardinal:category")) {
 			mark = new MarkCard(this, node);
-			return;
 		} else if (keys.containsKey("buoy_isolated_danger:category")
 				|| keys.containsKey("beacon_isolated_danger:category")) {
 			mark = new MarkIsol(this, node);
-			return;
 		} else if (keys.containsKey("buoy_safe_water:category")
 				|| keys.containsKey("beacon_safe_water:category")) {
 			mark = new MarkSaw(this, node);
-			return;
 		} else if (keys.containsKey("buoy_special_purpose:category")
 				|| keys.containsKey("beacon_special_purpose:category")) {
 			mark = new MarkSpec(this, node);
-			return;
-		}
-
-		if (keys.containsKey("buoy_lateral:shape")
+		} else if (keys.containsKey("buoy_lateral:shape")
 				|| keys.containsKey("beacon_lateral:shape")) {
 			mark = new MarkLat(this, node);
-			return;
 		} else if (keys.containsKey("buoy_cardinal:shape")
 				|| keys.containsKey("beacon_cardinal:shape")) {
 			mark = new MarkCard(this, node);
-			return;
 		} else if (keys.containsKey("buoy_isolated_danger:shape")
 				|| keys.containsKey("beacon_isolated_danger:shape")) {
 			mark = new MarkIsol(this, node);
-			return;
 		} else if (keys.containsKey("buoy_safe_water:shape")
 				|| keys.containsKey("beacon_safe_water:shape")) {
 			mark = new MarkSaw(this, node);
-			return;
 		} else if (keys.containsKey("buoy_special_purpose:shape")
 				|| keys.containsKey("beacon_special_purpose:shape")) {
 			mark = new MarkSpec(this, node);
-			return;
-		}
-
-		if (keys.containsKey("buoy_lateral:colour")
+		} else if (keys.containsKey("buoy_lateral:colour")
 				|| keys.containsKey("beacon_lateral:colour")) {
 			mark = new MarkLat(this, node);
-			return;
 		} else if (keys.containsKey("buoy_cardinal:colour")
 				|| keys.containsKey("beacon_cardinal:colour")) {
 			mark = new MarkCard(this, node);
-			return;
 		} else if (keys.containsKey("buoy_isolated_danger:colour")
 				|| keys.containsKey("beacon_isolated_danger:colour")) {
 			mark = new MarkIsol(this, node);
-			return;
 		} else if (keys.containsKey("buoy_safe_water:colour")
 				|| keys.containsKey("beacon_safe_water:colour")) {
 			mark = new MarkSaw(this, node);
-			return;
 		} else if (keys.containsKey("buoy_special_purpose:colour")
 				|| keys.containsKey("beacon_special_purpose:colour")) {
 			mark = new MarkSpec(this, node);
-			return;
-		}
-
-		manager.showVisualMessage(tr("No seamark recognised at this node"));
-		mark = new MarkUkn(this, node);
-		return;
+		}
+		
+		if (mark == null) {
+			manager.showVisualMessage(tr("No seamark recognised at this node"));
+			mark = new MarkUkn(this, node);
+		} else {
+			mark.parseMark();
+		}
 	}
-
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java	(revision 24801)
@@ -12,10 +12,11 @@
 
 	public MarkCard(OSeaMAction dia, Node node) {
-		super(dia);
-
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 		String str;
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 
 		if (!dlg.panelMain.hazButton.isSelected())
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java	(revision 24801)
@@ -10,10 +10,12 @@
 public class MarkIsol extends SeaMark {
 	public MarkIsol(OSeaMAction dia, Node node) {
-		super(dia);
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 
 		String str;
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 /*
 		dlg.cbM01TypeOfMark.setSelectedIndex(ISOLATED_DANGER);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java	(revision 24801)
@@ -9,10 +9,12 @@
 public class MarkLat extends SeaMark {
 	public MarkLat(OSeaMAction dia, Node node) {
-		super(dia);
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 
 		String str;
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 /*
 		dlg.cbM01TypeOfMark.setSelectedIndex(LATERAL);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java	(revision 24801)
@@ -10,9 +10,11 @@
 public class MarkLight extends SeaMark {
 	public MarkLight(OSeaMAction dia, Node node) {
-		super(dia);
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 
 /*		dlg.cbM01TypeOfMark.setSelectedIndex(LIGHT);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java	(revision 24801)
@@ -10,10 +10,12 @@
 public class MarkSaw extends SeaMark {
 	public MarkSaw(OSeaMAction dia, Node node) {
-		super(dia);
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 
 		String str;
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 
 /*		dlg.cbM01TypeOfMark.setSelectedIndex(SAFE_WATER);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java	(revision 24801)
@@ -10,10 +10,12 @@
 public class MarkSpec extends SeaMark {
 	public MarkSpec(OSeaMAction dia, Node node) {
-		super(dia);
+		super(dia, node);
+	}
+	
+	public void parseMark() {
 
 		String str;
 		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
+		keys = getNode().getKeys();
 
 /*		dlg.cbM01TypeOfMark.setSelectedIndex(SPECIAL_PURPOSE);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkUkn.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkUkn.java	(revision 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkUkn.java	(revision 24801)
@@ -1,7 +1,3 @@
 package oseam.seamarks;
-
-import java.util.Map;
-
-import javax.swing.ButtonGroup;
 
 import org.openstreetmap.josm.data.osm.Node;
@@ -11,14 +7,10 @@
 public class MarkUkn extends SeaMark {
 	public MarkUkn(OSeaMAction dia, Node node) {
-		super(dia);
-
-		String str;
-		Map<String, String> keys;
-		keys = node.getKeys();
-		setNode(node);
-
+		super(dia, node);
 		dlg.panelMain.clearSelections();
 	}
 
+	public void parseMark() {}
+	
 	public void paintSign() {
 /*		if (dlg.paintlock)
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 24799)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 24801)
@@ -69,9 +69,10 @@
 
 	public void setDlg(OSeaMAction dia) {
-		this.dlg = dia;
-	}
-
-	protected SeaMark(OSeaMAction dia) {
 		dlg = dia;
+	}
+
+	protected SeaMark(OSeaMAction dia, Node node) {
+		dlg = dia;
+		this.node = node;
 	}
 
@@ -178,4 +179,6 @@
 	}
 
+	public abstract void parseMark();
+	
 	public abstract void paintSign();
 
