Index: applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22626)
@@ -19,4 +19,5 @@
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
+import javax.swing.JToggleButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
@@ -108,12 +109,7 @@
 	private JDialog dM01SeaMap = null;
 	private JPanel pM01SeaMap = null;
-	private JLabel lM01Colour = null;
 	private JLabel lM01TimeUnit = null;
-	private JLabel lM01HeightUnit = null;
-	private JLabel lM01RangeUnit = null;
 	private JLabel lM01RepeatTime = null;
 	private JLabel lM01Kennung = null;
-	private JLabel lM01Height = null;
-	private JLabel lM01Range = null;
 	private JLabel lM01Name = null;
 	private JLabel lM01Props02 = null;
@@ -123,5 +119,5 @@
 	private JLabel lM01Head = null;
 	public JLabel lM01Icon01 = null;
-	public JComboBox cbM01Region = null;
+	public JToggleButton tbM01Region = null;
 	public JComboBox cbM01TypeOfMark = null;
 	public JComboBox cbM01StyleOfMark = null;
@@ -135,8 +131,5 @@
 	private JButton bM01Close = null;
 	public JTextField tfM01RepeatTime = null;
-	public JTextField tfM01Range = null;
-	public JTextField tfM01Height = null;
 	public JComboBox cbM01Kennung = null;
-	public JComboBox cbM01Colour = null;
 	public JTextField tfM01FireMark = null;
 	private JCheckBox cM01IconVisible = null;
@@ -320,5 +313,5 @@
 				"/images/Auge.png")));
 
-		cbM01Region.setEnabled(true);
+		tbM01Region.setEnabled(true);
 		cbM01TypeOfMark.setEnabled(true);
 		cbM01StyleOfMark.setEnabled(true);
@@ -342,12 +335,9 @@
 
 		if (keys.containsKey("seamark") || keys.containsKey("seamark:type")) {
-			if (keys.containsKey("seamark:type")) {
-			}
-
-			if ((keys.containsKey("seamark:buoy_lateral:category") == true)
-					|| (keys.containsKey("seamark:beacon_lateral:category") == true)) {
+
+			if (keys.containsKey("seamark:buoy_lateral:category")
+					|| keys.containsKey("seamark:beacon_lateral:category")) {
 
 				buoy = null; // Prototyp der Lateraltonne
-				int ind = 0; // index für cbM01TypeOfMark
 				String cat; // Kathegorie
 
@@ -385,5 +375,4 @@
 					}
 					buoy.setName(name);
-					ind = SeaMark.PORT_HAND;
 				}
 
@@ -399,5 +388,4 @@
 					}
 					buoy.setName(name);
-					ind = SeaMark.STARBOARD_HAND;
 				}
 
@@ -414,5 +402,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.PREF_PORT_HAND;
 				}
 
@@ -429,5 +416,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.PREF_STARBOARD_HAND;
 				}
 
@@ -455,5 +441,4 @@
 					buoy.setNode(node);
 					buoy.setValid(true);
-					buoy.setBuoyIndex(ind);
 					cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
 					buoy.paintSign();
@@ -473,5 +458,4 @@
 
 				buoy = null; // Prototyp der Kardinaltonne
-				int ind = 6; // index für cbM01TypeOfMark
 				String cat; // Kathegorie
 
@@ -485,7 +469,7 @@
 				if (name.compareTo("") == 0) {
 					if (keys.containsKey("seamark:buoy_cardinal:name"))
-						name = keys.get("seamark:buoy_lateral:name");
+						name = keys.get("seamark:buoy_cardinal:name");
 					if (keys.containsKey("seamark:beacon_cardinal:name"))
-						name = keys.get("seamark:beacon_lateral:name");
+						name = keys.get("seamark:beacon_cardinal:name");
 				}
 
@@ -507,5 +491,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.CARD_NORTH;
 				} // Ende if(str.compareTo("black;yellow")== 0)
 
@@ -519,5 +502,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.CARD_EAST;
 				} // Ende if(str.compareTo("black;yellow;black")== 0)
 
@@ -531,5 +513,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.CARD_SOUTH;
 				} // Ende if(str.compareTo("yellow;black")== 0)
 
@@ -543,5 +524,4 @@
 
 					buoy.setName(name);
-					ind = SeaMark.CARD_WEST;
 				} // Ende if(str.compareTo("yellow;black;black")== 0)
 
@@ -564,5 +544,4 @@
 					buoy.setNode(node);
 					buoy.setValid(true);
-					buoy.setBuoyIndex(ind);
 					cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
 					buoy.paintSign();
@@ -579,5 +558,5 @@
 
 			// Test buoy_safewater
-			if (keys.containsKey("seamark:buoy_water:shape") == true) {
+			if (keys.containsKey("seamark:buoy_safe_water:shape") == true) {
 
 				if (keys.containsKey("seamark:buoy_safe_water:colour") == false) {
@@ -620,5 +599,4 @@
 				buoy.setValid(true);
 				buoy.setNode(node);
-				buoy.setBuoyIndex(5);
 				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
 				buoy.paintSign();
@@ -670,5 +648,4 @@
 				buoy.setValid(true);
 				buoy.setNode(node);
-				buoy.setBuoyIndex(5);
 				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
 				buoy.paintSign();
@@ -679,15 +656,15 @@
 
 			// 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)
+			if ((keys.containsKey("seamark:buoy_isolated_danger:colour") == true)
+					|| (keys.containsKey("seamark:beacon_isolated_danger:colour") == true)) {
+
+				if ((keys.containsKey("seamark:buoy_isolated_danger:colour") == true)
+						&& (keys.containsKey("seamark:buoy_isolated_danger:shape") == false)) {
+					buoy = new BuoyUkn(this, "Parse-Error: No shape set");
+					buoy.setNode(node);
+					return;
+				}
+
+				if (keys.containsKey("seamark:buoy_isolated_danger:colour") == true)
 					str = keys.get("seamark:buoy_isolated_danger:colour");
 				else
@@ -725,5 +702,111 @@
 				buoy.setValid(true);
 				buoy.setNode(node);
-				buoy.setBuoyIndex(5);
+				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
+				buoy.paintSign();
+
+				return;
+
+			}
+
+			// Test light_float
+
+			if ((keys.containsKey("seamark:type") == true)
+					&& (keys.get("seamark:type").equals("light_float"))) {
+
+				if (keys.containsKey("seamark:light_float:colour") == false) {
+					buoy = new BuoyUkn(this, "Parse-Error: No colour set");
+					buoy.setNode(node);
+					return;
+				}
+
+				str = keys.get("seamark:light_float:colour");
+				if (str.equals("red") || str.equals("green")
+						|| str.equals("red;green;red") || str.equals("green;red;green")) {
+					boolean region = Main.pref.get("tomsplugin.IALA").equals("B");
+					if (str.equals("red")) {
+						if ((keys.containsKey("seamark:topmark:shape") && keys.get(
+								"seamark:topmark:shape").equals("cylinder"))
+								|| (region == SeaMark.IALA_A)) {
+							buoy = new BuoyLat(this, SeaMark.PORT_HAND);
+						} else {
+							buoy = new BuoyLat(this, SeaMark.STARBOARD_HAND);
+						}
+						buoy.setColour(SeaMark.RED);
+					} else if (str.equals("green")) {
+						if ((keys.containsKey("seamark:topmark:shape") && keys.get(
+								"seamark:topmark:shape").equals("cone, point up"))
+								|| (region == SeaMark.IALA_A)) {
+							buoy = new BuoyLat(this, SeaMark.STARBOARD_HAND);
+						} else {
+							buoy = new BuoyLat(this, SeaMark.PORT_HAND);
+						}
+						buoy.setColour(SeaMark.GREEN);
+					} else if (str.equals("red;green;red")) {
+						if ((keys.containsKey("seamark:topmark:shape") && keys.get(
+								"seamark:topmark:shape").equals("cylinder"))
+								|| (region == SeaMark.IALA_A)) {
+							buoy = new BuoyLat(this, SeaMark.PREF_PORT_HAND);
+						} else {
+							buoy = new BuoyLat(this, SeaMark.PREF_STARBOARD_HAND);
+						}
+						buoy.setColour(SeaMark.RED_GREEN_RED);
+					} else if (str.equals("green;red;green")) {
+						if ((keys.containsKey("seamark:topmark:shape") && keys.get(
+								"seamark:topmark:shape").equals("cone, point up"))
+								|| (region == SeaMark.IALA_A)) {
+							buoy = new BuoyLat(this, SeaMark.PREF_STARBOARD_HAND);
+						} else {
+							buoy = new BuoyLat(this, SeaMark.PREF_PORT_HAND);
+						}
+						buoy.setColour(SeaMark.GREEN_RED_GREEN);
+					}
+				} else if (str.equals("black;yellow")) {
+					buoy = new BuoyCard(this, SeaMark.CARD_NORTH);
+					buoy.setColour(SeaMark.BLACK_YELLOW);
+				} else if (str.equals("black;yellow;black")) {
+					buoy = new BuoyCard(this, SeaMark.CARD_EAST);
+					buoy.setColour(SeaMark.BLACK_YELLOW_BLACK);
+				} else if (str.equals("yellow;black")) {
+					buoy = new BuoyCard(this, SeaMark.CARD_SOUTH);
+					buoy.setColour(SeaMark.YELLOW_BLACK);
+				} else if (str.equals("yellow;black;yellow")) {
+					buoy = new BuoyCard(this, SeaMark.CARD_WEST);
+					buoy.setColour(SeaMark.YELLOW_BLACK_YELLOW);
+				} else if (str.equals("black;red;black")) {
+					buoy = new BuoyIsol(this, SeaMark.ISOLATED_DANGER);
+					buoy.setColour(SeaMark.BLACK_RED_BLACK);
+				} else if (str.equals("red;white")) {
+					buoy = new BuoySaw(this, SeaMark.SAFE_WATER);
+					buoy.setColour(SeaMark.RED_WHITE);
+				} else {
+					buoy = new BuoyUkn(this, "Parse-Error: Invalid colour");
+					buoy.setNode(node);
+					return;
+				}
+
+				buoy.setName(name);
+
+				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);
 				cbM01StyleOfMark.setSelectedIndex(buoy.getStyleIndex());
 				buoy.paintSign();
@@ -780,30 +863,10 @@
 		if (pM01SeaMap == null) {
 			lM01TimeUnit = new JLabel();
-			lM01TimeUnit.setBounds(new Rectangle(125, 250, 26, 20));
+			lM01TimeUnit.setBounds(new Rectangle(325, 230, 26, 20));
 			lM01TimeUnit.setFont(new Font("Dialog", Font.PLAIN, 12));
 			lM01TimeUnit.setText("s");
 
-			lM01HeightUnit = new JLabel();
-			lM01HeightUnit.setBounds(new Rectangle(220, 250, 26, 20));
-			lM01HeightUnit.setFont(new Font("Dialog", Font.PLAIN, 12));
-			lM01HeightUnit.setText("m");
-
-			lM01RangeUnit = new JLabel();
-			lM01RangeUnit.setBounds(new Rectangle(320, 250, 26, 20));
-			lM01RangeUnit.setFont(new Font("Dialog", Font.PLAIN, 12));
-			lM01RangeUnit.setText("M");
-
-			lM01Height = new JLabel();
-			lM01Height.setBounds(new Rectangle(140, 250, 70, 20));
-			lM01Height.setFont(new Font("Dialog", Font.PLAIN, 12));
-			lM01Height.setText("Height:");
-
-			lM01Range = new JLabel();
-			lM01Range.setBounds(new Rectangle(240, 250, 70, 20));
-			lM01Range.setFont(new Font("Dialog", Font.PLAIN, 12));
-			lM01Range.setText("Range:");
-
 			lM01RepeatTime = new JLabel();
-			lM01RepeatTime.setBounds(new Rectangle(45, 250, 70, 20));
+			lM01RepeatTime.setBounds(new Rectangle(245, 230, 70, 20));
 			lM01RepeatTime.setFont(new Font("Dialog", Font.PLAIN, 12));
 			lM01RepeatTime.setText("Period:");
@@ -814,9 +877,4 @@
 			lM01Kennung.setText("Character:");
 
-			lM01Colour = new JLabel();
-			lM01Colour.setBounds(new Rectangle(240, 230, 60, 20));
-			lM01Colour.setFont(new Font("Dialog", Font.PLAIN, 12));
-			lM01Colour.setText("Colour:");
-
 			lM01Name = new JLabel();
 			lM01Name.setBounds(new Rectangle(5, 120, 82, 16));
@@ -856,10 +914,5 @@
 			pM01SeaMap.setLayout(null);
 			pM01SeaMap.add(lM01TimeUnit, null);
-//			pM01SeaMap.add(lM01HeightUnit, null);
-//			pM01SeaMap.add(lM01RangeUnit, null);
-//			pM01SeaMap.add(lM01Height, null);
-//			pM01SeaMap.add(lM01Range, null);
 			pM01SeaMap.add(lM01RepeatTime, null);
-			pM01SeaMap.add(lM01Colour, null);
 			pM01SeaMap.add(lM01Kennung, null);
 			pM01SeaMap.add(lM01Name, null);
@@ -870,5 +923,5 @@
 			pM01SeaMap.add(lM01Head, null);
 			pM01SeaMap.add(lM01Icon01, null);
-			pM01SeaMap.add(getCbM01Region(), null);
+			pM01SeaMap.add(getTbM01Region(), null);
 			pM01SeaMap.add(getCbM01TypeOfMark(), null);
 			pM01SeaMap.add(getCbM01StyleOfMark(), null);
@@ -882,8 +935,5 @@
 			pM01SeaMap.add(getBM01Close(), null);
 			pM01SeaMap.add(getTfM01RepeatTime(), null);
-//			pM01SeaMap.add(getTfM01Range(), null);
-//			pM01SeaMap.add(getTfM01Height(), null);
 			pM01SeaMap.add(getCbM01Kennung(), null);
-			pM01SeaMap.add(getCbM01Colour(), null);
 			pM01SeaMap.add(getTfM01FireMark(), null);
 			pM01SeaMap.add(getCM01IconVisible(), null);
@@ -948,5 +998,5 @@
 							buoy.setColour(SeaMark.RED);
 							buoy.setRegion(SeaMark.IALA_A);
-							cbM01Region.setSelectedIndex(SeaMark.IALA_A);
+							tbM01Region.setSelected(SeaMark.IALA_A);
 						} else {
 							buoy.setColour(SeaMark.GREEN);
@@ -960,5 +1010,5 @@
 							buoy.setColour(SeaMark.GREEN);
 							buoy.setRegion(SeaMark.IALA_A);
-							cbM01Region.setSelectedIndex(SeaMark.IALA_A);
+							tbM01Region.setSelected(SeaMark.IALA_A);
 						} else {
 							buoy.setColour(SeaMark.RED);
@@ -972,5 +1022,5 @@
 							buoy.setColour(SeaMark.RED_GREEN_RED);
 							buoy.setRegion(SeaMark.IALA_A);
-							cbM01Region.setSelectedIndex(SeaMark.IALA_A);
+							tbM01Region.setSelected(SeaMark.IALA_A);
 						} else {
 							buoy.setColour(SeaMark.GREEN_RED_GREEN);
@@ -984,5 +1034,5 @@
 							buoy.setColour(SeaMark.GREEN_RED_GREEN);
 							buoy.setRegion(SeaMark.IALA_A);
-							cbM01Region.setSelectedIndex(SeaMark.IALA_A);
+							tbM01Region.setSelected(SeaMark.IALA_A);
 						} else {
 							buoy.setColour(SeaMark.RED_GREEN_RED);
@@ -1037,21 +1087,28 @@
 	}
 
-	private JComboBox getCbM01Region() {
-		if (cbM01Region == null) {
-			cbM01Region = new JComboBox();
-
-			// Inhalt der ComboBox
-			cbM01Region.addItem("Not set");
-			cbM01Region.addItem("IALA-A");
-			cbM01Region.addItem("IALA-B");
-
-			cbM01Region.setBounds(new Rectangle(60, 55, 100, 25));
-			cbM01Region.setEditable(false);
-			cbM01Region.setFont(new Font("Dialog", Font.PLAIN, 12));
-			cbM01Region.setEnabled(true);
-
-			cbM01Region.addActionListener(new java.awt.event.ActionListener() {
+	private JToggleButton getTbM01Region() {
+		if (tbM01Region == null) {
+			tbM01Region = new JToggleButton();
+
+			tbM01Region.setBounds(new Rectangle(60, 55, 80, 25));
+			tbM01Region.setFont(new Font("Dialog", Font.PLAIN, 12));
+			tbM01Region.setEnabled(false);
+			if (Main.pref.get("tomsplugin.IALA").equals("B")) {
+				tbM01Region.setSelected(true);
+				tbM01Region.setText("IALA-B");
+			} else {
+				tbM01Region.setSelected(false);
+				tbM01Region.setText("IALA-A");
+			}
+
+			tbM01Region.addActionListener(new java.awt.event.ActionListener() {
 				public void actionPerformed(java.awt.event.ActionEvent e) {
-					buoy.setRegion(cbM01Region.getSelectedIndex());
+					if (tbM01Region.isSelected()) {
+						buoy.setRegion(true);
+						tbM01Region.setText("IALA-B");
+					} else {
+						buoy.setRegion(false);
+						tbM01Region.setText("IALA-A");
+					}
 					if (buoy instanceof BuoyLat)
 						buoy.setLightColour();
@@ -1061,5 +1118,5 @@
 		}
 
-		return cbM01Region;
+		return tbM01Region;
 	}
 
@@ -1225,5 +1282,5 @@
 		if (tfM01RepeatTime == null) {
 			tfM01RepeatTime = new JTextField();
-			tfM01RepeatTime.setBounds(new Rectangle(90, 250, 30, 20));
+			tfM01RepeatTime.setBounds(new Rectangle(290, 230, 30, 20));
 			tfM01RepeatTime.addActionListener(new java.awt.event.ActionListener() {
 				public void actionPerformed(java.awt.event.ActionEvent e) {
@@ -1246,58 +1303,4 @@
 
 		return tfM01RepeatTime;
-	}
-
-	private JTextField getTfM01Range() {
-		if (tfM01Range == null) {
-			tfM01Range = new JTextField();
-			tfM01Range.setBounds(new Rectangle(285, 250, 30, 20));
-			tfM01Range.setEnabled(false);
-			tfM01Range.addActionListener(new java.awt.event.ActionListener() {
-				public void actionPerformed(java.awt.event.ActionEvent e) {
-					String s = tfM01Range.getText();
-
-					buoy.setRange(s);
-					buoy.paintSign();
-				}
-			});
-
-			tfM01Range.addFocusListener(new java.awt.event.FocusAdapter() {
-				public void focusLost(java.awt.event.FocusEvent e) {
-					String s = tfM01Range.getText();
-
-					buoy.setRange(s);
-					buoy.paintSign();
-				}
-			});
-		}
-
-		return tfM01Range;
-	}
-
-	private JTextField getTfM01Height() {
-		if (tfM01Height == null) {
-			tfM01Height = new JTextField();
-			tfM01Height.setBounds(new Rectangle(185, 250, 30, 20));
-			tfM01Height.setEnabled(false);
-			tfM01Height.addActionListener(new java.awt.event.ActionListener() {
-				public void actionPerformed(java.awt.event.ActionEvent e) {
-					String s = tfM01Height.getText();
-
-					buoy.setHeight(s);
-					buoy.paintSign();
-				}
-			});
-
-			tfM01Height.addFocusListener(new java.awt.event.FocusAdapter() {
-				public void focusLost(java.awt.event.FocusEvent e) {
-					String s = tfM01Height.getText();
-
-					buoy.setHeight(s);
-					buoy.paintSign();
-				}
-			});
-		}
-
-		return tfM01Height;
 	}
 
@@ -1352,30 +1355,4 @@
 
 		return cbM01Kennung;
-	}
-
-	private JComboBox getCbM01Colour() {
-		if (cbM01Colour == null) {
-			cbM01Colour = new JComboBox();
-			cbM01Colour.setBounds(new Rectangle(285, 230, 50, 20));
-			cbM01Colour.addActionListener(new java.awt.event.ActionListener() {
-				public void actionPerformed(java.awt.event.ActionEvent e) {
-					String it = (String) cbM01Colour.getSelectedItem();
-
-					if (it == null)
-						return;
-
-					if (it.compareTo("Not set") == 0)
-						return;
-
-					if (buoy == null) {
-						return;
-					}
-					buoy.setLightColour(it);
-					buoy.paintSign();
-				}
-			});
-		}
-
-		return cbM01Colour;
 	}
 
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 22626)
@@ -56,7 +56,6 @@
 	 * Regions
 	 */
-	public final static int UNKNOWN_REGION = 0;
-	public final static int IALA_A = 1;
-	public final static int IALA_B = 2;
+	public final static boolean IALA_A = false;
+	public final static boolean IALA_B = true;
 
 	/**
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 22626)
@@ -47,12 +47,14 @@
 	}
 
-	private int Region = 0;
-
-	public int getRegion() {
+	private boolean Region = false;
+
+	public boolean getRegion() {
 		return Region;
 	}
 
-	public void setRegion(int region) {
+	public void setRegion(boolean region) {
 		Region = region;
+		dlg.tbM01Region.setSelected(region);
+		dlg.tbM01Region.setText(region ? "IALA-B" : "IALA-A");
 	}
 
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 22626)
@@ -28,13 +28,10 @@
 		dlg.cbM01StyleOfMark.addItem("Float");
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("W");
-		dlg.cbM01Colour.setSelectedIndex(0);
-		dlg.cbM01Colour.setEnabled(false);
 		dlg.cM01Fired.setSelected(false);
 		dlg.cM01TopMark.setSelected(false);
-
+		dlg.tbM01Region.setEnabled(false);
+
+		setBuoyIndex(type);
 		setStyleIndex(0);
-		setBuoyIndex(type);
 		setLightColour("W");
 
@@ -251,9 +248,7 @@
 			else if (str.compareTo("spar") == 0)
 				setStyleIndex(CARD_SPAR);
-			else if (str.compareTo("float") == 0)
-				setStyleIndex(CARD_FLOAT);
 			else
 				ret = false;
-		} else if (keys.containsKey("seamark:beacon_cardinal")) {
+		} else if (keys.containsKey("seamark:beacon_cardinal:colour")) {
 			if (keys.containsKey("seamark:beacon_cardinal:shape")) {
 				str = keys.get("seamark:beacon_cardinal:shape");
@@ -261,6 +256,11 @@
 				if (str.compareTo("tower") == 0)
 					setStyleIndex(CARD_TOWER);
+				else
+					setStyleIndex(CARD_BEACON);
 			} else
 				setStyleIndex(CARD_BEACON);
+		} else if ((keys.containsKey("seamark:type") == true)
+				&& (keys.get("seamark:type").equals("light_float"))) {
+			setStyleIndex(CARD_FLOAT);
 		}
 		return ret;
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 22626)
@@ -31,11 +31,8 @@
 		dlg.cbM01Kennung.addItem("Fl(2)");
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("W");
-		dlg.cbM01Colour.setSelectedIndex(0);
-		dlg.cbM01Colour.setEnabled(false);
 		dlg.cM01Fired.setSelected(false);
 		dlg.cM01TopMark.setSelected(true);
 		dlg.cM01TopMark.setEnabled(false);
+		dlg.tbM01Region.setEnabled(false);
 
 		setColour(SeaMark.BLACK_RED_BLACK);
@@ -243,14 +240,18 @@
 			else
 				ret = false;
-		}
-		if (keys.containsKey("seamark:beacon_isolated_danger:shape")) {
-			str = keys.get("seamark:beacon_isolated_danger:shape");
-
-			if (str.compareTo("stake") == 0)
+		} else if (keys.containsKey("seamark:beacon_isolated_danger:colour")) {
+			if (keys.containsKey("seamark:beacon_isolated_danger:shape")) {
+				str = keys.get("seamark:beacon_isolated_danger:shape");
+
+				if (str.compareTo("tower") == 0)
+					setStyleIndex(ISOL_TOWER);
+				else
+					setStyleIndex(ISOL_BEACON);
+			} else
 				setStyleIndex(ISOL_BEACON);
-			else
-				ret = false;
-		}
-
+		} else if ((keys.containsKey("seamark:type") == true)
+				&& (keys.get("seamark:type").equals("light_float"))) {
+			setStyleIndex(CARD_FLOAT);
+		}
 		return ret;
 	}
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22626)
@@ -32,11 +32,4 @@
 		dlg.cbM01Kennung.setSelectedIndex(0);
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("");
-		dlg.cbM01Colour.addItem("R");
-		dlg.cbM01Colour.addItem("G");
-		dlg.cbM01Colour.setSelectedIndex(0);
-		dlg.cbM01Colour.setEnabled(false);
-
 		setBuoyIndex(type);
 		setStyleIndex(0);
@@ -44,4 +37,5 @@
 		setFired(false);
 		setTopMark(false);
+		setRegion(Main.pref.get("tomsplugin.IALA").equals("B"));
 
 		refreshStyles();
@@ -119,5 +113,5 @@
 
 		int cat = getBuoyIndex();
-		int region = getRegion();
+		boolean region = getRegion();
 		int style = getStyleIndex();
 
@@ -351,5 +345,5 @@
 			image += ".png";
 
-// System.out.println("finename: " + image);
+			// System.out.println("finename: " + image);
 			dlg.lM01Icon01.setIcon(new ImageIcon(getClass().getResource(image)));
 		} else
@@ -701,6 +695,7 @@
 
 		saveTopMarkData(shape, colour);
-
 		saveLightData(colour);
+
+		Main.pref.put("tomsplugin.IALA", getRegion() ? "B" : "A");
 	}
 
@@ -723,7 +718,10 @@
 			case PORT_HAND:
 			case PREF_PORT_HAND:
-				if (str.compareTo("cylinder") == 0) {
+				if (str.equals("cylinder")) {
 					setTopMark(true);
-
+					setRegion(IALA_A);
+				} else if (str.equals("cone, point up")) {
+					setTopMark(true);
+					setRegion(IALA_B);
 				} else {
 					setTopMark(false);
@@ -734,7 +732,10 @@
 			case STARBOARD_HAND:
 			case PREF_STARBOARD_HAND:
-				if (str.compareTo("cone, point up") == 0 || str.compareTo("cone") == 0) {
+				if (str.equals("cone, point up")) {
 					setTopMark(true);
-
+					setRegion(IALA_A);
+				} else if (str.equals("cylinder")) {
+					setTopMark(true);
+					setRegion(IALA_B);
 				} else {
 					setTopMark(false);
@@ -746,12 +747,9 @@
 				ret = false;
 			}
-
 			if (!hasTopMark()) {
 				setErrMsg("Parse-Error: Topmark falsch");
 				ret = false;
 			}
-
-		}
-
+		}
 		return ret;
 	}
@@ -779,4 +777,5 @@
 
 			if (isFired()) {
+
 			} else {
 				if (getErrMsg() == null)
@@ -792,11 +791,9 @@
 
 	public void setLightColour() {
-		if (getRegion() != IALA_B
+		if (getRegion() == IALA_A
 				&& (getBuoyIndex() == PORT_HAND || getBuoyIndex() == PREF_PORT_HAND)) {
 			super.setLightColour("R");
-			dlg.cbM01Colour.setSelectedIndex(RED_LIGHT);
 		} else {
 			super.setLightColour("G");
-			dlg.cbM01Colour.setSelectedIndex(GREEN_LIGHT);
 		}
 	}
@@ -812,21 +809,37 @@
 		case PORT_HAND:
 		case PREF_PORT_HAND:
-			if (str.compareTo("red") == 0) {
-
-				setFired(true);
-				super.setLightColour("R");
+			if (getRegion() == IALA_A) {
+				if (str.compareTo("red") == 0) {
+					setFired(true);
+					super.setLightColour("R");
+				} else {
+					super.setLightColour("");
+				}
 			} else {
-				super.setLightColour("");
-			}
-
+				if (str.compareTo("green") == 0) {
+					setFired(true);
+					super.setLightColour("G");
+				} else {
+					super.setLightColour("");
+				}
+			}
 			break;
 
 		case STARBOARD_HAND:
 		case PREF_STARBOARD_HAND:
-			if (str.compareTo("green") == 0) {
-				setFired(true);
-				super.setLightColour("G");
+			if (getRegion() == IALA_A) {
+				if (str.compareTo("green") == 0) {
+					setFired(true);
+					super.setLightColour("G");
+				} else {
+					super.setLightColour("");
+				}
 			} else {
-				super.setLightColour("");
+				if (str.compareTo("red") == 0) {
+					setFired(true);
+					super.setLightColour("R");
+				} else {
+					super.setLightColour("");
+				}
 			}
 			break;
@@ -856,8 +869,4 @@
 				else if (str.compareTo("spar") == 0)
 					setStyleIndex(LAT_SPAR);
-				else if (str.compareTo("float") == 0)
-					setStyleIndex(LAT_FLOAT);
-				else if (str.compareTo("perch") == 0)
-					setStyleIndex(LAT_PERCH);
 				else
 					ret = false;
@@ -882,8 +891,4 @@
 				else if (str.compareTo("spar") == 0)
 					setStyleIndex(LAT_SPAR);
-				else if (str.compareTo("float") == 0)
-					setStyleIndex(LAT_FLOAT);
-				else if (str.compareTo("perch") == 0)
-					setStyleIndex(LAT_PERCH);
 				else
 					ret = false;
@@ -904,48 +909,16 @@
 				ret = false;
 			}
-		} else if (keys.containsKey("seamark:beacon_lateral:shape")) {
-			str = keys.get("seamark:beacon_lateral:shape");
-
-			int cat = getBuoyIndex();
-			switch (cat) {
-			case PORT_HAND:
-				if (str.compareTo("stake") == 0)
-					setStyleIndex(LAT_BEACON);
-				else if (str.compareTo("tower") == 0)
+		} else if (keys.containsKey("seamark:beacon_lateral:colour")) {
+			if (keys.containsKey("seamark:beacon_lateral:shape")) {
+				str = keys.get("seamark:beacon_lateral:shape");
+				if (str.compareTo("tower") == 0)
 					setStyleIndex(LAT_TOWER);
 				else
-					ret = false;
-				break;
-
-			case PREF_PORT_HAND:
-				if (str.compareTo("stake") == 0)
 					setStyleIndex(LAT_BEACON);
-				else if (str.compareTo("tower") == 0)
-					setStyleIndex(LAT_TOWER);
-				else
-					ret = false;
-				break;
-
-			case STARBOARD_HAND:
-				if (str.compareTo("stake") == 0)
-					setStyleIndex(LAT_BEACON);
-				else if (str.compareTo("tower") == 0)
-					setStyleIndex(LAT_TOWER);
-				else
-					ret = false;
-				break;
-
-			case PREF_STARBOARD_HAND:
-				if (str.compareTo("stake") == 0)
-					setStyleIndex(LAT_BEACON);
-				else if (str.compareTo("tower") == 0)
-					setStyleIndex(LAT_TOWER);
-				else
-					ret = false;
-				break;
-
-			default:
-				ret = false;
-			}
+			} else
+				setStyleIndex(LAT_BEACON);
+		} else if ((keys.containsKey("seamark:type") == true)
+				&& (keys.get("seamark:type").equals("light_float"))) {
+			setStyleIndex(LAT_FLOAT);
 		}
 		return ret;
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyNota.java	(revision 22626)
@@ -32,10 +32,5 @@
 		dlg.cbM01Kennung.setSelectedIndex(0);
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("Not set");
-		dlg.cbM01Colour.addItem("R");
-		dlg.cbM01Colour.addItem("G");
-		dlg.cbM01Colour.addItem("W");
-		dlg.cbM01Colour.setEnabled(true);
+		dlg.tbM01Region.setEnabled(false);
 
 		setBuoyIndex(type);
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 22626)
@@ -33,10 +33,7 @@
 		dlg.cbM01Kennung.addItem("Mo()");
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("W");
-		dlg.cbM01Colour.setSelectedIndex(0);
-		dlg.cbM01Colour.setEnabled(false);
 		dlg.cM01Fired.setSelected(false);
 		dlg.cM01TopMark.setSelected(false);
+		dlg.tbM01Region.setEnabled(false);
 
 		setColour(SeaMark.RED_WHITE);
@@ -227,8 +224,9 @@
 			else if (str.compareTo("sphere") == 0)
 				setStyleIndex(SAFE_SPHERE);
-			else if (str.compareTo("float") == 0)
-				setStyleIndex(SAFE_FLOAT);
 			else
 				ret = false;
+		} else if ((keys.containsKey("seamark:type") == true)
+				&& (keys.get("seamark:type").equals("light_float"))) {
+			setStyleIndex(SAFE_FLOAT);
 		}
 
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 22626)
@@ -28,10 +28,7 @@
 		dlg.cbM01Kennung.addItem("Not set");
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.addItem("W");
-		dlg.cbM01Colour.setSelectedIndex(0);
-		dlg.cbM01Colour.setEnabled(false);
 		dlg.cM01Fired.setSelected(false);
 		dlg.cM01TopMark.setSelected(false);
+		dlg.tbM01Region.setEnabled(false);
 
 		setColour(SeaMark.YELLOW);
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyUkn.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyUkn.java	(revision 22625)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyUkn.java	(revision 22626)
@@ -13,5 +13,4 @@
 		super(dia);
 
-		setBuoyIndex(0);
 		if (dlg.cbM01Kennung != null) {
 			dlg.cbM01Kennung.removeAllItems();
@@ -19,8 +18,7 @@
 		}
 
-		dlg.cbM01Colour.removeAllItems();
-		dlg.cbM01Colour.setEnabled(false);
 		dlg.cM01Fired.setSelected(false);
 		dlg.cM01TopMark.setSelected(false);
+		dlg.tbM01Region.setEnabled(false);
 
 		setErrMsg(Msg);
@@ -29,4 +27,5 @@
 		setFired(false);
 		setValid(false);
+		setBuoyIndex(0);
 
 		paintSign();
