Index: /applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22835)
+++ /applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 22836)
@@ -171,8 +171,6 @@
 		String str = Main.pref.get("mappaint.style.sources");
 		if (!str.contains("dev.openseamap.org")) {
-			if (!str.equals(""))
-				str += new String(new char[] { 0x1e });
-			Main.pref.put("mappaint.style.sources", str
-					+ "http://dev.openseamap.org/josm/seamark_styles.xml");
+			if (!str.equals("")) str += new String(new char[] {0x1e});
+			Main.pref.put("mappaint.style.sources", str + "http://dev.openseamap.org/josm/seamark_styles.xml");
 		}
 	}
@@ -180,5 +178,6 @@
 	public void CloseDialog() {
 		onode = null;
-		DataSet.removeSelectionListener(SmpListener);
+		DataSet.selListeners.remove(SmpListener);
+//		DataSet.removeSelectionListener(SmpListener);
 		Selection = null;
 
@@ -226,5 +225,6 @@
 		// siehe org.openstreetmap.josm.plugins.osb -> OsbLayer.java
 		// Einhängen des Listeners in die Eventqueue von josm
-		DataSet.addSelectionListener(SmpListener);
+		DataSet.selListeners.add(SmpListener);
+//		DataSet.addSelectionListener(SmpListener);
 	}
 
@@ -444,5 +444,6 @@
 						PicRebuild();
 					// Deaktivierung des Listeners
-					DataSet.removeSelectionListener(SmpListener);
+					DataSet.selListeners.remove(SmpListener);
+//				DataSet.removeSelectionListener(SmpListener);
 					Selection = null;
 
@@ -816,5 +817,6 @@
 						PicRebuild();
 					// Deaktivierung des Listeners
-					DataSet.removeSelectionListener(SmpListener);
+					DataSet.selListeners.remove(SmpListener);
+//				DataSet.removeSelectionListener(SmpListener);
 					Selection = null;
 					SmpItem.setEnabled(true);
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22835)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 22836)
@@ -117,9 +117,9 @@
 					setColour(SeaMark.GREEN);
 			}
-		} else if (cat.compareTo("starboard") == 0) {
+		} else if (cat.equals("starboard")) {
 
 			setBuoyIndex(STARBOARD_HAND);
 
-			if (col.compareTo("green") == 0) {
+			if (col.equals("green")) {
 				setRegion(SeaMark.IALA_A);
 				setColour(SeaMark.GREEN);
@@ -133,12 +133,12 @@
 					setColour(SeaMark.RED);
 			}
-		} else if (cat.compareTo("preferred_channel_port") == 0) {
+		} else if (cat.equals("preferred_channel_port")) {
 
 			setBuoyIndex(PREF_PORT_HAND);
 
-			if (col.compareTo("red;green;red") == 0) {
+			if (col.equals("red;green;red")) {
 				setRegion(SeaMark.IALA_A);
 				setColour(SeaMark.RED_GREEN_RED);
-			} else if (col.compareTo("green;red;green") == 0) {
+			} else if (col.equals("green;red;green")) {
 				setRegion(SeaMark.IALA_B);
 				setColour(SeaMark.GREEN_RED_GREEN);
@@ -150,12 +150,12 @@
 			}
 
-		} else if (cat.compareTo("preferred_channel_starboard") == 0) {
+		} else if (cat.equals("preferred_channel_starboard")) {
 
 			setBuoyIndex(PREF_STARBOARD_HAND);
 
-			if (col.compareTo("green;red;green") == 0) {
+			if (col.equals("green;red;green")) {
 				setRegion(SeaMark.IALA_A);
 				setColour(SeaMark.GREEN_RED_GREEN);
-			} else if (col.compareTo("red;green;red") == 0) {
+			} else if (col.equals("red;green;red")) {
 				setRegion(SeaMark.IALA_B);
 				setColour(SeaMark.RED_GREEN_RED);
@@ -173,47 +173,46 @@
 			switch (getBuoyIndex()) {
 			case PORT_HAND:
-				if (str.compareTo("can") == 0)
+				if (str.equals("can"))
 					setStyleIndex(LAT_CAN);
-				else if (str.compareTo("pillar") == 0)
+				else if (str.equals("pillar"))
 					setStyleIndex(LAT_PILLAR);
-				else if (str.compareTo("spar") == 0)
+				else if (str.equals("spar"))
 					setStyleIndex(LAT_SPAR);
 				break;
 
 			case PREF_PORT_HAND:
-				if (str.compareTo("can") == 0)
+				if (str.equals("can"))
 					setStyleIndex(LAT_CAN);
-				else if (str.compareTo("pillar") == 0)
+				else if (str.equals("pillar"))
 					setStyleIndex(LAT_PILLAR);
-				else if (str.compareTo("spar") == 0)
+				else if (str.equals("spar"))
 					setStyleIndex(LAT_SPAR);
 				break;
 
 			case STARBOARD_HAND:
-				if (str.compareTo("conical") == 0)
+				if (str.equals("conical"))
 					setStyleIndex(LAT_CONE);
-				else if (str.compareTo("pillar") == 0)
+				else if (str.equals("pillar"))
 					setStyleIndex(LAT_PILLAR);
-				else if (str.compareTo("spar") == 0)
+				else if (str.equals("spar"))
 					setStyleIndex(LAT_SPAR);
 				break;
 
 			case PREF_STARBOARD_HAND:
-				if (str.compareTo("conical") == 0)
+				if (str.equals("conical"))
 					setStyleIndex(LAT_CONE);
-				else if (str.compareTo("pillar") == 0)
+				else if (str.equals("pillar"))
 					setStyleIndex(LAT_PILLAR);
-				else if (str.compareTo("spar") == 0)
+				else if (str.equals("spar"))
 					setStyleIndex(LAT_SPAR);
 				break;
 			}
-		} 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
-					setStyleIndex(LAT_BEACON);
-			} else
+		} else if (keys.containsKey("seamark:beacon_lateral:shape")) {
+			str = keys.get("seamark:beacon_lateral:shape");
+			if (str.equals("tower"))
+				setStyleIndex(LAT_TOWER);
+			else if (str.equals("perch"))
+				setStyleIndex(LAT_PERCH);
+			else
 				setStyleIndex(LAT_BEACON);
 		} else if (keys.containsKey("seamark:type")
@@ -224,18 +223,20 @@
 		refreshStyles();
 
-		if (keys.containsKey("seamark:topmark:shape")
-				|| keys.containsKey("seamark:topmark:colour")) {
-			setTopMark(true);
-		}
-
-		if (keys.containsKey("seamark:light:colour")) {
-			setLightColour(keys.get("seamark:light:colour"));
-			setFired(true);
-		}
-
-		if (keys.containsKey("seamark:light:character")) {
-			setLightGroup(keys);
-			setLightChar(keys.get("seamark:light:character"));
-			setLightPeriod(keys);
+		if (getStyleIndex() != LAT_PERCH) {
+			if (keys.containsKey("seamark:topmark:shape")
+					|| keys.containsKey("seamark:topmark:colour")) {
+				setTopMark(true);
+			}
+
+			if (keys.containsKey("seamark:light:colour")) {
+				setLightColour(keys.get("seamark:light:colour"));
+				setFired(true);
+			}
+
+			if (keys.containsKey("seamark:light:character")) {
+				setLightGroup(keys);
+				setLightChar(keys.get("seamark:light:character"));
+				setLightPeriod(keys);
+			}
 		}
 	}
@@ -312,4 +313,14 @@
 		int style = getStyleIndex();
 
+		if (style == LAT_PERCH) {
+			dlg.cM01Fired.setSelected(false);
+			dlg.cM01TopMark.setSelected(false);
+			dlg.cM01Fired.setEnabled(false);
+			dlg.cM01TopMark.setEnabled(false);
+		} else {
+			dlg.cM01Fired.setEnabled(true);
+			dlg.cM01TopMark.setEnabled(true);
+		}
+
 		switch (getBuoyIndex()) {
 		case SeaMark.PORT_HAND:
@@ -588,7 +599,7 @@
 				break;
 			case LAT_PERCH:
-				super.saveSign("buoy_lateral");
-				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "perch"));
+				super.saveSign("beacon_lateral");
+				Main.main.undoRedo.add(new ChangePropertyCommand(node,
+						"seamark:beacon_lateral:shape", "perch"));
 				break;
 			default:
@@ -598,16 +609,19 @@
 			case LAT_PILLAR:
 			case LAT_SPAR:
+				Main.main.undoRedo.add(new ChangePropertyCommand(node,
+						"seamark:buoy_lateral:category", "port"));
+				if (getRegion() != SeaMark.IALA_B) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(node,
+							"seamark:buoy_lateral:colour", "red"));
+					colour = "red";
+				} else {
+					Main.main.undoRedo.add(new ChangePropertyCommand(node,
+							"seamark:buoy_lateral:colour", "green"));
+					colour = "green";
+				}
+				break;
 			case LAT_PERCH:
 				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:category", "port"));
-				if (getRegion() != SeaMark.IALA_B) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(node,
-							"seamark:buoy_lateral:colour", "red"));
-					colour = "red";
-				} else {
-					Main.main.undoRedo.add(new ChangePropertyCommand(node,
-							"seamark:buoy_lateral:colour", "green"));
-					colour = "green";
-				}
+						"seamark:beacon_lateral:category", "port"));
 				break;
 			case LAT_BEACON:
@@ -752,7 +766,7 @@
 				break;
 			case LAT_PERCH:
-				super.saveSign("buoy_lateral");
-				Main.main.undoRedo.add(new ChangePropertyCommand(node,
-						"seamark:buoy_lateral:shape", "perch"));
+				super.saveSign("beacon_lateral");
+				Main.main.undoRedo.add(new ChangePropertyCommand(node,
+						"seamark:beacon_lateral:shape", "perch"));
 				break;
 			default:
@@ -798,4 +812,8 @@
 					colour = "red";
 				}
+				break;
+			case LAT_PERCH:
+				Main.main.undoRedo.add(new ChangePropertyCommand(node,
+						"seamark:beacon_lateral:category", "starboard"));
 				break;
 			}
