Index: applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22561)
@@ -347,5 +347,6 @@
 			}
 
-			if (keys.containsKey("seamark:buoy_lateral:category") == true) {
+			if ((keys.containsKey("seamark:buoy_lateral:category") == true)
+					|| (keys.containsKey("seamark:beacon_lateral:category") == true)) {
 
 				buoy = null; // Prototyp der Lateraltonne
@@ -353,5 +354,6 @@
 				String cat; // Kathegorie
 
-				if (keys.containsKey("seamark:buoy_lateral:colour") == false) {
+				if ((keys.containsKey("seamark:buoy_lateral:colour") == false)
+						&& (keys.containsKey("seamark:beacon_lateral:colour") == false)) {
 					buoy = new BuoyUkn(this, "Parse-Error: Buoy without colour");
 					buoy.setNode(node);
@@ -359,13 +361,18 @@
 				}
 
-				if (keys.containsKey("seamark:buoy_lateral:name"))
-					if (name.compareTo("") == 0) {
-						// name nur ueberschreiben, wenn nicht anderweitig gesetzt
+				if (name.compareTo("") == 0) {
+					if (keys.containsKey("seamark:buoy_lateral:name"))
 						name = keys.get("seamark:buoy_lateral:name");
-
-					}
-
-				str = keys.get("seamark:buoy_lateral:colour");
-				cat = keys.get("seamark:buoy_lateral:category");
+					if (keys.containsKey("seamark:beacon_lateral:name"))
+						name = keys.get("seamark:beacon_lateral:name");
+				}
+
+				if (keys.containsKey("seamark:buoy_lateral:category") == true) {
+					str = keys.get("seamark:buoy_lateral:colour");
+					cat = keys.get("seamark:buoy_lateral:category");
+				} else {
+					str = keys.get("seamark:beacon_lateral:colour");
+					cat = keys.get("seamark:beacon_lateral:category");
+				}
 
 				if (cat.compareTo("port") == 0) {
@@ -400,6 +407,5 @@
 
 					buoy = new BuoyLat(this, SeaMark.PREF_PORT_HAND);
-					if (str.compareTo("red;green;red") == 0
-							|| str.compareTo("red-green-red") == 0) {
+					if (str.compareTo("red;green;red") == 0) {
 						buoy.setRegion(SeaMark.IALA_A);
 						buoy.setColour(SeaMark.RED_GREEN_RED);
@@ -416,6 +422,5 @@
 
 					buoy = new BuoyLat(this, SeaMark.PREF_STARBOARD_HAND);
-					if (str.compareTo("green;red;green") == 0
-							|| str.compareTo("green-red-green") == 0) {
+					if (str.compareTo("green;red;green") == 0) {
 						buoy.setRegion(SeaMark.IALA_A);
 						buoy.setColour(SeaMark.GREEN_RED_GREEN);
@@ -466,5 +471,6 @@
 							// true)
 			// Test auf Kardinal-
-			if (keys.containsKey("seamark:buoy_cardinal:category") == true) {
+			if ((keys.containsKey("seamark:buoy_cardinal:category") == true)
+					|| (keys.containsKey("seamark:beacon_cardinal:category") == true)) {
 
 				buoy = null; // Prototyp der Kardinaltonne
@@ -472,22 +478,28 @@
 				String cat; // Kathegorie
 
-				if (keys.containsKey("seamark:buoy_cardinal:colour") == false) {
-					buoy = new BuoyUkn(this, "Parse-Error: Tonne ohne Farbe");
+				if ((keys.containsKey("seamark:buoy_cardinal:colour") == false)
+						&& (keys.containsKey("seamark:beacon_cardinal:colour") == false)) {
+					buoy = new BuoyUkn(this, "Parse-Error: No colour set");
 					buoy.setNode(node);
 					return;
 				}
 
-				if (keys.containsKey("seamark:buoy_cardinal:name"))
-					if (name.compareTo("") == 0) {
-						// name nur ueberschreiben, wenn nicht anderweitig gesetzt
+				if (name.compareTo("") == 0) {
+					if (keys.containsKey("seamark:buoy_cardinal:name"))
 						name = keys.get("seamark:buoy_lateral:name");
-					}
-
-				str = keys.get("seamark:buoy_cardinal:colour");
-				cat = keys.get("seamark:buoy_cardinal:category");
+					if (keys.containsKey("seamark:beacon_cardinal:name"))
+						name = keys.get("seamark:beacon_lateral:name");
+				}
+
+				if (keys.containsKey("seamark:buoy_cardinal:category") == true) {
+					str = keys.get("seamark:buoy_cardinal:colour");
+					cat = keys.get("seamark:buoy_cardinal:category");
+				} else {
+					str = keys.get("seamark:beacon_cardinal:colour");
+					cat = keys.get("seamark:beacon_cardinal:category");
+				}
 
 				// Test auf Kardinaltonne Nord
-				if (str.compareTo("black;yellow") == 0
-						|| str.compareTo("black-yellow") == 0) {
+				if (str.compareTo("black;yellow") == 0) {
 
 					buoy = new BuoyCard(this, SeaMark.CARD_NORTH);
@@ -501,6 +513,5 @@
 
 				// Test auf Kardinaltonne Ost
-				if (str.compareTo("black;yellow;black") == 0
-						|| str.compareTo("black-yellow-black") == 0) {
+				if (str.compareTo("black;yellow;black") == 0) {
 
 					buoy = new BuoyCard(this, SeaMark.CARD_EAST);
@@ -514,6 +525,5 @@
 
 				// Test auf Kardinaltonne Sued
-				if (str.compareTo("yellow;black") == 0
-						|| str.compareTo("yellow-black") == 0) {
+				if (str.compareTo("yellow;black") == 0) {
 
 					buoy = new BuoyCard(this, SeaMark.CARD_SOUTH);
@@ -527,6 +537,5 @@
 
 				// Test auf Kardinaltonne West
-				if (str.compareTo("yellow;black;yellow") == 0
-						|| str.compareTo("yellow-black-yellow") == 0) {
+				if (str.compareTo("yellow;black;yellow") == 0) {
 
 					buoy = new BuoyCard(this, SeaMark.CARD_WEST);
@@ -571,9 +580,9 @@
 			}
 
-			// Test auf Ansteuertonne (buoy_safewater
+			// Test buoy_safewater
 			if (keys.containsKey("seamark:buoy_safewater:shape") == true) {
 
 				if (keys.containsKey("seamark:buoy_safewater:colour") == false) {
-					buoy = new BuoyUkn(this, "Parse-Error: Tonne ohne Farbe");
+					buoy = new BuoyUkn(this, "Parse-Error: No colour set");
 					buoy.setNode(node);
 					return;
@@ -582,11 +591,117 @@
 				str = keys.get("seamark:buoy_safewater:colour");
 				if (str.compareTo("red;white") != 0) {
-					buoy = new BuoyUkn(this, "Parse-Error: Tonne mit falscher Farbe");
+					buoy = new BuoyUkn(this, "Parse-Error: Invalid colour");
 					buoy.setNode(node);
 					return;
 				}
 
+				buoy = new BuoySaw(this, SeaMark.SAFE_WATER);
 				buoy.setName(name);
 				buoy.setColour(SeaMark.RED_WHITE);
+
+				if (buoy.parseTopMark(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy.setValid(false);
+				}
+
+				if (buoy.parseLight(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy.setValid(false);
+				}
+
+				if (buoy.parseShape(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy = new BuoyUkn(this, str);
+					buoy.setNode(node);
+					return;
+				}
+
+				buoy.setValid(true);
+				buoy.setNode(node);
+				buoy.setBuoyIndex(5);
+				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
+				buoy.paintSign();
+
+				return;
+
+			}
+
+			// Test buoy_special_purpose
+			if (keys.containsKey("seamark:buoy_special_purpose:shape") == true) {
+
+				if (keys.containsKey("seamark:buoy_special_purpose:colour") == false) {
+					buoy = new BuoyUkn(this, "Parse-Error: No colour set");
+					buoy.setNode(node);
+					return;
+				}
+
+				str = keys.get("seamark:buoy_special_purpose:colour");
+				if (str.compareTo("yellow") != 0) {
+					buoy = new BuoyUkn(this, "Parse-Error: Invalid colour");
+					buoy.setNode(node);
+					return;
+				}
+
+				buoy = new BuoySpec(this, SeaMark.SPECIAL_PURPOSE);
+				buoy.setName(name);
+				buoy.setColour(SeaMark.YELLOW);
+
+				if (buoy.parseTopMark(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy.setValid(false);
+				}
+
+				if (buoy.parseLight(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy.setValid(false);
+				}
+
+				if (buoy.parseShape(node) == false) {
+					str = buoy.getErrMsg();
+					if (str == null)
+						buoy = new BuoyUkn(this, str);
+					buoy.setNode(node);
+					return;
+				}
+
+				buoy.setValid(true);
+				buoy.setNode(node);
+				buoy.setBuoyIndex(5);
+				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
+				buoy.paintSign();
+
+				return;
+
+			}
+
+			// Test buoy_isolated_danger
+			if ((keys.containsKey("seamark:buoy_isolated_danger:shape") == true)
+					|| (keys.containsKey("seamark:beacon_isolated_danger:shape") == true)) {
+
+				if ((keys.containsKey("seamark:buoy_isolated_danger:colour") == false)
+						&& (keys.containsKey("seamark:beacon_isolated_danger:colour") == false)) {
+					buoy = new BuoyUkn(this, "Parse-Error: No colour set");
+					buoy.setNode(node);
+					return;
+				}
+
+				if (keys.containsKey("seamark:buoy_isolated_danger:shape") == true)
+					str = keys.get("seamark:buoy_isolated_danger:colour");
+				else
+					str = keys.get("seamark:beacon_isolated_danger:colour");
+				if (str.compareTo("black;red;black") != 0) {
+					buoy = new BuoyUkn(this, "Parse-Error: Invalid colour");
+					buoy.setNode(node);
+					return;
+				}
+
+				buoy = new BuoyIsol(this, SeaMark.ISOLATED_DANGER);
+				buoy.setName(name);
+				buoy.setColour(SeaMark.BLACK_RED_BLACK);
 
 				if (buoy.parseTopMark(node) == false) {
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 22561)
@@ -86,11 +86,10 @@
 	public final static int SPEC_PILLAR = 1;
 	public final static int SPEC_SPAR = 2;
-	public final static int SPEC_BEACON = 3;
-	public final static int SPEC_SPHERE = 4;
-	public final static int SPEC_BARREL = 5;
-	public final static int LIGHT_MAJOR = 1;
-	public final static int LIGHT_MINOR = 2;
-	public final static int LIGHT_FLOAT = 3;
-	public final static int LIGHT_HOUSE = 4;
+	public final static int SPEC_SPHERE = 3;
+	public final static int SPEC_BARREL = 4;
+	public final static int LIGHT_HOUSE = 1;
+	public final static int LIGHT_MAJOR = 2;
+	public final static int LIGHT_MINOR = 3;
+	public final static int LIGHT_FLOAT = 4;
 
 	/**
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 22561)
@@ -311,5 +311,4 @@
 
 				String c = keys.get("seamark:light:character");
-				String ce = c;
 
 				if (c.contains("+")) {
@@ -320,8 +319,6 @@
 
 				if (getLightGroup() != "")
-					ce = c + "(" + getLightGroup() + ")";
 				if (tmp != null) {
 					c = c + tmp;
-					ce = ce + tmp;
 				}
 
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 22561)
@@ -121,8 +121,15 @@
 		default:
 		}
+		if (getStyleIndex() == ISOL_BEACON) {
 		Main.main.undoRedo.add(new ChangePropertyCommand(node,
-				"seamark:buoy_isolated_danger:colour_pattern", "horizontal stripes"));
+				"seamark:beacon_isolated_danger:colour_pattern", "horizontal stripes"));
 		Main.main.undoRedo.add(new ChangePropertyCommand(node,
-				"seamark:buoy_isolated_danger:colour", "black;red;black"));
+				"seamark:beacon_isolated_danger:colour", "black;red;black"));
+		} else {
+			Main.main.undoRedo.add(new ChangePropertyCommand(node,
+					"seamark:buoy_isolated_danger:colour_pattern", "horizontal stripes"));
+			Main.main.undoRedo.add(new ChangePropertyCommand(node,
+					"seamark:buoy_isolated_danger:colour", "black;red;black"));
+		}
 
 		saveTopMarkData("2 spheres", "black");
@@ -172,8 +179,5 @@
 			if (keys.containsKey("seamark:light:character")) {
 				setLightGroup(keys);
-
 				String c = keys.get("seamark:light:character");
-				String ce = c;
-
 				setLightChar(c);
 				setLightPeriod(keys);
@@ -186,7 +190,7 @@
 			} else {
 				if (getErrMsg() == null)
-					setErrMsg("Parse-Error: Licht falsch");
+					setErrMsg("Parse-Error: Invalid light");
 				else
-					setErrMsg(getErrMsg() + " / Licht falsch");
+					setErrMsg(getErrMsg() + " / Invalid light");
 
 				ret = false;
@@ -216,5 +220,11 @@
 			else if (str.compareTo("spar") == 0)
 				setStyleIndex(ISOL_SPAR);
-			else if (str.compareTo("beacon") == 0)
+			else
+				ret = false;
+		}
+		if (keys.containsKey("seamark:beacon_isolated_danger:shape")) {
+			str = keys.get("seamark:beacon_isolated_danger:shape");
+
+			if (str.compareTo("stake") == 0)
 				setStyleIndex(ISOL_BEACON);
 			else
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22561)
@@ -488,10 +488,10 @@
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "stake"));
+						"seamark:beacon_lateral:shape", "stake"));
 				break;
 			case LAT_TOWER:
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "tower"));
+						"seamark:beacon_lateral:shape", "tower"));
 				break;
 			case LAT_FLOAT:
@@ -563,10 +563,10 @@
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "stake"));
+						"seamark:beacon_lateral:shape", "stake"));
 				break;
 			case LAT_TOWER:
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "tower"));
+						"seamark:beacon_lateral:shape", "tower"));
 				break;
 			case LAT_FLOAT:
@@ -636,10 +636,10 @@
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "stake"));
+						"seamark:beacon_lateral:shape", "stake"));
 				break;
 			case LAT_TOWER:
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "tower"));
+						"seamark:beacon_lateral:shape", "tower"));
 				break;
 			case LAT_FLOAT:
@@ -710,10 +710,10 @@
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "stake"));
+						"seamark:beacon_lateral:shape", "stake"));
 				break;
 			case LAT_TOWER:
 				super.saveSign("beacon_lateral");
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "tower"));
+						"seamark:beacon_lateral:shape", "tower"));
 				break;
 			default:
@@ -832,7 +832,5 @@
 			if (keys.containsKey("seamark:light:character")) {
 				setLightGroup(keys);
-
 				String c = keys.get("seamark:light:character");
-				String ce = c;
 				setLightChar(c);
 				setLightPeriod(keys);
@@ -973,5 +971,5 @@
 			switch (cat) {
 			case PORT_HAND:
-				if (str.compareTo("beacon") == 0)
+				if (str.compareTo("stake") == 0)
 					setStyleIndex(LAT_BEACON);
 				else if (str.compareTo("tower") == 0)
@@ -982,5 +980,5 @@
 
 			case PREF_PORT_HAND:
-				if (str.compareTo("beacon") == 0)
+				if (str.compareTo("stake") == 0)
 					setStyleIndex(LAT_BEACON);
 				else if (str.compareTo("tower") == 0)
@@ -991,5 +989,5 @@
 
 			case STARBOARD_HAND:
-				if (str.compareTo("beacon") == 0)
+				if (str.compareTo("stake") == 0)
 					setStyleIndex(LAT_BEACON);
 				else if (str.compareTo("tower") == 0)
@@ -1000,5 +998,5 @@
 
 			case PREF_STARBOARD_HAND:
-				if (str.compareTo("beacon") == 0)
+				if (str.compareTo("stake") == 0)
 					setStyleIndex(LAT_BEACON);
 				else if (str.compareTo("tower") == 0)
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java	(revision 22561)
@@ -55,8 +55,8 @@
 		dlg.cbM01StyleOfMark.removeAllItems();
 		dlg.cbM01StyleOfMark.addItem("Not set");
+		dlg.cbM01StyleOfMark.addItem("Lighthouse");
 		dlg.cbM01StyleOfMark.addItem("Major Light");
 		dlg.cbM01StyleOfMark.addItem("Minor Light");
 		dlg.cbM01StyleOfMark.addItem("Light Float");
-		dlg.cbM01StyleOfMark.addItem("Lighthouse");
 
 		if (style >= dlg.cbM01StyleOfMark.getItemCount())
@@ -80,6 +80,6 @@
 
 		switch (getStyleIndex()) {
+		case SeaMark.LIGHT_HOUSE:
 		case SeaMark.LIGHT_MAJOR:
-		case SeaMark.LIGHT_HOUSE:
 			dlg.lM01Icon01.setIcon(new ImageIcon(getClass().getResource(
 					"/images/Light_Major.png")));
@@ -119,4 +119,7 @@
 
 		switch (getStyleIndex()) {
+		case LIGHT_HOUSE:
+			super.saveSign("lighthouse");
+			break;
 		case LIGHT_MAJOR:
 			super.saveSign("major_light");
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 22561)
@@ -160,5 +160,5 @@
 
 			} else {
-				setErrMsg("Parse-Error: Topmark unbekannt");
+				setErrMsg("Parse-Error: Unknown topmark");
 				ret = false;
 			}
@@ -181,8 +181,5 @@
 			if (keys.containsKey("seamark:light:character")) {
 				setLightGroup(keys);
-
 				String c = keys.get("seamark:light:character");
-				String ce = c;
-
 				setLightChar(c);
 				setLightPeriod(keys);
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 22557)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 22561)
@@ -23,5 +23,4 @@
 		dlg.cbM01StyleOfMark.addItem("Pillar Buoy");
 		dlg.cbM01StyleOfMark.addItem("Spar Buoy");
-		dlg.cbM01StyleOfMark.addItem("Beacon");
 		dlg.cbM01StyleOfMark.addItem("Sphere Buoy");
 		dlg.cbM01StyleOfMark.addItem("Barrel");
@@ -63,12 +62,4 @@
 					"/images/Special_Purpose_Spar.png")));
 			break;
-		case SPEC_BEACON:
-			if (isFired())
-				dlg.lM01Icon01.setIcon(new ImageIcon(getClass().getResource(
-						"/images/Special_Purpose_Beacon_Lit.png")));
-			else
-				dlg.lM01Icon01.setIcon(new ImageIcon(getClass().getResource(
-						"/images/Special_Purpose_Beacon.png")));
-			break;
 		case SPEC_SPHERE:
 			dlg.lM01Icon01.setIcon(new ImageIcon(getClass().getResource(
@@ -97,7 +88,4 @@
 			Checker("/images/Cross_Top_Buoy_Yellow.png", "/images/Light_White.png");
 			break;
-		case SPEC_BEACON:
-			Checker("/images/Cross_Top_Post_Yellow.png", "/images/Light_White.png");
-			break;
 		case SPEC_SPHERE:
 		case SPEC_BARREL:
@@ -115,8 +103,5 @@
 		}
 
-		if (getStyleIndex() == SPEC_BEACON)
-			super.saveSign("beacon_special_purpose");
-		else
-			super.saveSign("buoy_special_purpose");
+		super.saveSign("buoy_special_purpose");
 
 		switch (getStyleIndex()) {
@@ -132,8 +117,4 @@
 			Main.main.undoRedo.add(new ChangePropertyCommand(node,
 					"seamark:buoy_special_purpose:shape", "sphere"));
-			break;
-		case SPEC_BEACON:
-			Main.main.undoRedo.add(new ChangePropertyCommand(node,
-					"seamark:beacon_special_purpose:shape", "stake"));
 			break;
 		case SPEC_BARREL:
@@ -194,5 +175,4 @@
 
 				String c = keys.get("seamark:light:character");
-				String ce = c;
 
 				setLightChar(c);
