Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 23141)
@@ -621,73 +621,79 @@
 
 	protected void saveLightData() {
-
+		String colour;
 		if (dlg.cM01Fired.isSelected()) {
-			setSectorIndex(0);
-			String colour = getLightColour();
-			if (colour.equals("R")) {
+			if (!(colour = LightColour[0]).isEmpty())
+				if (colour.equals("R")) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:colour", "red"));
+				} else if (colour.equals("G")) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:colour", "green"));
+				} else if (colour.equals("W")) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:colour", "white"));
+				}
+
+			if (!LightPeriod[0].isEmpty())
 				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:colour", "red"));
-			} else if (colour.equals("G")) {
+						"seamark:light:period", LightPeriod[0]));
+
+			if (!LightChar[0].isEmpty())
 				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:colour", "green"));
-			} else if (colour.equals("W")) {
+						"seamark:light:character", LightChar[0]));
+
+			if (!LightGroup[0].isEmpty())
 				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:colour", "white"));
-			}
-
-			if (!getLightPeriod().isEmpty())
+						"seamark:light:group", LightGroup[0]));
+
+			if (!Height[0].isEmpty())
 				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:period", getLightPeriod()));
-
-			if (!getLightChar().isEmpty())
+						"seamark:light:height", Height[0]));
+
+			if (!Range[0].isEmpty())
 				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:character", getLightChar()));
-
-			if (!getLightGroup().isEmpty())
-				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:group", getLightGroup()));
-
-			if (!getHeight().isEmpty())
-				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:height", getHeight()));
-
-			if (!getRange().isEmpty())
-				Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-						"seamark:light:range", getRange()));
+						"seamark:light:range", Range[0]));
 
 			for (int i = 1; i < 10; i++) {
-				setSectorIndex(i);
-				
-				colour = getLightColour();
-				if (colour.equals("R")) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:colour:" + i, "red"));
-				} else if (colour.equals("G")) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:colour:" + i, "green"));
-				} else if (colour.equals("W")) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:colour:" + i, "white"));
-				}
-
-				if (!getLightPeriod().isEmpty())
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:period:" + i, getLightPeriod()));
-
-				if (!getLightChar().isEmpty())
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:character:" + i, getLightChar()));
-
-				if (!getLightGroup().isEmpty())
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:group:" + i, getLightGroup()));
-
-				if (!getHeight().isEmpty())
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:height:" + i, getHeight()));
-
-				if (!getRange().isEmpty())
-					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
-							"seamark:light:range:" + i, getRange()));
+				if ((colour = LightColour[i]) != null)
+					if (colour.equals("R")) {
+						Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+								"seamark:light:colour:" + i, "red"));
+						if ((Bearing1[i] != null) && (Bearing2[i] != null) && (Radius[i] != null))
+								Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+										"seamark:light:" + i, "red:" + Bearing1[i] + ":" + Bearing2[i] + ":" + Radius[i]));
+					} else if (colour.equals("G")) {
+						Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+								"seamark:light:colour:" + i, "green"));
+						if ((Bearing1[i] != null) && (Bearing2[i] != null) && (Radius[i] != null))
+							Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+									"seamark:light:" + i, "green:" + Bearing1[i] + ":" + Bearing2[i] + ":" + Radius[i]));
+					} else if (colour.equals("W")) {
+						Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+								"seamark:light:colour:" + i, "white"));
+						if ((Bearing1[i] != null) && (Bearing2[i] != null) && (Radius[i] != null))
+							Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+									"seamark:light:" + i, "white:" + Bearing1[i] + ":" + Bearing2[i] + ":" + Radius[i]));
+					}
+
+				if (LightPeriod[i] != null)
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:period:" + i, LightPeriod[i]));
+
+				if (LightChar[i] != null)
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:character:" + i, LightChar[i]));
+
+				if (LightGroup[i] != null)
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:group:" + i, LightGroup[i]));
+
+				if (Height[i] != null)
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:height:" + i, Height[i]));
+
+				if (Range[i] != null)
+					Main.main.undoRedo.add(new ChangePropertyCommand(Node,
+							"seamark:light:range:" + i, Range[i]));
 			}
 		}
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyCard.java	(revision 23141)
@@ -210,5 +210,27 @@
 			dlg.cM01Fired.setEnabled(true);
 			dlg.cM01Fired.setVisible(true);
-
+			dlg.cbM01Colour.setVisible(false);
+			dlg.lM01Colour.setVisible(false);
+
+			if (isFired()) {
+				switch (getStyleIndex()) {
+				case LAT_BEACON:
+				case LAT_TOWER:
+					dlg.rbM01Fired1.setVisible(true);
+					dlg.rbM01FiredN.setVisible(true);
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				case LAT_FLOAT:
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				default:
+				}
+			}
 			String image = "/images/Cardinal"; //$NON-NLS-1$
 
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyIsol.java	(revision 23141)
@@ -129,5 +129,28 @@
 			dlg.cM01Fog.setVisible(true);
 			dlg.cM01Fired.setVisible(true);
+			dlg.cbM01Colour.setVisible(false);
+			dlg.lM01Colour.setVisible(false);
 			
+			if (isFired()) {
+				switch (getStyleIndex()) {
+				case SPEC_FLOAT:
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				case SPEC_BEACON:
+				case SPEC_TOWER:
+					dlg.rbM01Fired1.setVisible(true);
+					dlg.rbM01FiredN.setVisible(true);
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				default:
+				}
+			}
+
 			String image = "/images/Cardinal"; //$NON-NLS-1$
 
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoyLat.java	(revision 23141)
@@ -25,5 +25,5 @@
 
 		resetMask();
-		
+
 		dlg.rbM01RegionA.setEnabled(true);
 		dlg.rbM01RegionB.setEnabled(true);
@@ -350,6 +350,4 @@
 			dlg.tfM01Name.setEnabled(true);
 			dlg.tfM01Name.setText(getName());
-
-			String image = "/images/Lateral"; //$NON-NLS-1$
 
 			int cat = getBuoyIndex();
@@ -375,4 +373,28 @@
 				dlg.cM01TopMark.setEnabled(true);
 			}
+			dlg.cbM01Colour.setVisible(false);
+			dlg.lM01Colour.setVisible(false);
+
+			if (isFired()) {
+				switch (style) {
+				case LAT_BEACON:
+				case LAT_TOWER:
+					dlg.rbM01Fired1.setVisible(true);
+					dlg.rbM01FiredN.setVisible(true);
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				case LAT_FLOAT:
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				default:
+				}
+			}
+			String image = "/images/Lateral"; //$NON-NLS-1$
 
 			switch (getBuoyIndex()) {
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySaw.java	(revision 23141)
@@ -129,4 +129,27 @@
 			dlg.cM01Fired.setVisible(true);
 			dlg.cM01Fired.setEnabled(true);
+			dlg.cbM01Colour.setVisible(false);
+			dlg.lM01Colour.setVisible(false);
+
+			if (isFired()) {
+				switch (getStyleIndex()) {
+				case SPEC_FLOAT:
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				case SPEC_BEACON:
+				case SPEC_TOWER:
+					dlg.rbM01Fired1.setVisible(true);
+					dlg.rbM01FiredN.setVisible(true);
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				default:
+				}
+			}
 
 			String image = "/images/Safe_Water"; //$NON-NLS-1$
Index: /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java
===================================================================
--- /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 23140)
+++ /applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 23141)
@@ -156,4 +156,27 @@
 			dlg.cM01Fired.setVisible(true);
 			dlg.cM01Fired.setEnabled(true);
+			dlg.cbM01Colour.setVisible(false);
+			dlg.lM01Colour.setVisible(false);
+			
+			if (isFired()) {
+				switch (getStyleIndex()) {
+				case SPEC_FLOAT:
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				case SPEC_BEACON:
+				case SPEC_TOWER:
+					dlg.rbM01Fired1.setVisible(true);
+					dlg.rbM01FiredN.setVisible(true);
+					dlg.lM01Height.setVisible(true);
+					dlg.tfM01Height.setVisible(true);
+					dlg.lM01Range.setVisible(true);
+					dlg.tfM01Range.setVisible(true);
+					break;
+				default:
+				}
+			}
 
 			String image = "/images/Special_Purpose"; //$NON-NLS-1$
