diff --git a/A320-main.xml b/A320-main.xml
index cb066eb1..1a4ed5c8 100644
--- a/A320-main.xml
+++ b/A320-main.xml
@@ -1348,11 +1348,14 @@
 				<spoiler-r4 type="bool">0</spoiler-r4>
 				<spoiler-r5 type="bool">0</spoiler-r5>
 			</spoilers>
-			<engine-left-fire type="bool">0</engine-left-fire>
-			<engine-right-fire type="bool">0</engine-right-fire>
-			<apu-fire type="bool">0</apu-fire>
-			<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
-			<cargo-aft-fire type="bool">0</cargo-aft-fire>
+			<fire>
+				<engine-left-fire type="bool">0</engine-left-fire>
+				<engine-right-fire type="bool">0</engine-right-fire>
+				<apu-fire type="bool">0</apu-fire>
+				<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
+				<cargo-aft-fire type="bool">0</cargo-aft-fire>
+				<lavatory-fire type="bool">0</lavatory-fire>
+			</fire>
 		</failures>
 		
 		<fctl n="0">
@@ -1385,6 +1388,9 @@
 					<temperature type="double">0</temperature>
 				</fwd>
 			</cargo>
+			<lavatory>
+				<temperature type="double">0</temperature>
+			</lavatory>
 		</fire>
 		<fuel n="0">
 			<only-use-ctr-tank type="bool">0</only-use-ctr-tank>
diff --git a/AircraftConfig/acconfig.nas b/AircraftConfig/acconfig.nas
index c4c12d7a..68204794 100644
--- a/AircraftConfig/acconfig.nas
+++ b/AircraftConfig/acconfig.nas
@@ -56,10 +56,12 @@ var failResetOld = func {
 	setprop("/systems/failures/pump-green", 0);
 	setprop("/systems/failures/pump-yellow-eng", 0);
 	setprop("/systems/failures/pump-yellow-elec", 0);
-	setprop("/systems/failures/cargo-aft-fire", 0);
-	setprop("/systems/failures/cargo-fwd-fire", 0);
-	setprop("/systems/failures/engine-left-fire", 0);
-	setprop("/systems/failures/engine-right-fire", 0);
+	setprop("/systems/failures/fire/cargo-aft-fire", 0);
+	setprop("/systems/failures/fire/cargo-fwd-fire", 0);
+	setprop("/systems/failures/fire/engine-left-fire", 0);
+	setprop("/systems/failures/fire/apu-fire", 0);
+	setprop("/systems/failures/fire/engine-right-fire", 0);
+	setprop("/systems/failures/fire/lavatory-fire", 0);
 }
 
 failResetOld();
diff --git a/AircraftConfig/fail.xml b/AircraftConfig/fail.xml
index cfbe5caa..2f821e17 100644
--- a/AircraftConfig/fail.xml
+++ b/AircraftConfig/fail.xml
@@ -560,7 +560,7 @@
 					<stretch type="bool">true</stretch>
 				</hrule>
 				<text>
-					<label>Cargo Fire</label>
+					<label>Fire</label>
 				</text>
 				<hrule>
 					<stretch type="bool">true</stretch>
@@ -568,9 +568,9 @@
 			</group>
 			
 			<checkbox>
-				<label>AFT</label>
+				<label>AFT CRG</label>
 				<halign>left</halign>
-				<property>/systems/failures/cargo-aft-fire</property>
+				<property>/systems/failures/fire/cargo-aft-fire</property>
 				<binding>
 					<command>dialog-apply</command>
 				</binding>
@@ -578,15 +578,26 @@
 			</checkbox>
 			
 			<checkbox>
-				<label>FWD</label>
+				<label>FWD CRG</label>
 				<halign>left</halign>
-				<property>/systems/failures/cargo-fwd-fire</property>
+				<property>/systems/failures/fire/cargo-fwd-fire</property>
 				<binding>
 					<command>dialog-apply</command>
 				</binding>
 				<live>true</live>
 			</checkbox>
-				<group>
+			
+			<checkbox>
+				<label>LAV</label>
+				<halign>left</halign>
+				<property>/systems/failures/fire/lavatory-fire</property>
+				<binding>
+					<command>dialog-apply</command>
+				</binding>
+				<live>true</live>
+			</checkbox>
+			
+			<group>
 				<layout>hbox</layout>
 
 				<hrule>
@@ -603,7 +614,7 @@
 			<checkbox>
 				<label>Left Engine</label>
 				<halign>left</halign>
-				<property>/systems/failures/engine-left-fire</property>
+				<property>/systems/failures/fire/engine-left-fire</property>
 				<binding>
 					<command>dialog-apply</command>
 				</binding>
@@ -613,7 +624,7 @@
 			<checkbox>
 				<label>APU</label>
 				<halign>left</halign>
-				<property>/systems/failures/apu-fire</property>
+				<property>/systems/failures/fire/apu-fire</property>
 				<binding>
 					<command>dialog-apply</command>
 				</binding>
@@ -623,7 +634,7 @@
 			<checkbox>
 				<label>Right Engine</label>
 				<halign>left</halign>
-				<property>/systems/failures/engine-right-fire</property>
+				<property>/systems/failures/fire/engine-right-fire</property>
 				<binding>
 					<command>dialog-apply</command>
 				</binding>
diff --git a/Models/Engines/NEO/LeapXLeft.xml b/Models/Engines/NEO/LeapXLeft.xml
index 2b21519a..75b92db5 100644
--- a/Models/Engines/NEO/LeapXLeft.xml
+++ b/Models/Engines/NEO/LeapXLeft.xml
@@ -8,7 +8,7 @@
 
 	<params>
 		<n1>engines/engine[3]/n1</n1>
-		<on-fire>systems/failures/engine-left-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-left-fire</on-fire>
 		<contrail>engines/engine[0]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
 	</params>
diff --git a/Models/Engines/NEO/LeapXRight.xml b/Models/Engines/NEO/LeapXRight.xml
index cb6a369a..c3cc291e 100644
--- a/Models/Engines/NEO/LeapXRight.xml
+++ b/Models/Engines/NEO/LeapXRight.xml
@@ -8,7 +8,7 @@
 
 	<params>
 		<n1>engines/engine[4]/n1</n1>
-		<on-fire>systems/failures/engine-right-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-right-fire</on-fire>
 		<contrail>engines/engine[1]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
 	</params>
diff --git a/Models/Engines/NEO/PW1100GLeft.xml b/Models/Engines/NEO/PW1100GLeft.xml
index 7022ed79..48535219 100644
--- a/Models/Engines/NEO/PW1100GLeft.xml
+++ b/Models/Engines/NEO/PW1100GLeft.xml
@@ -13,7 +13,7 @@
 
 	<params>
 		<n1>engines/engine[3]/n1</n1>
-		<on-fire>systems/failures/engine-left-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-left-fire</on-fire>
 		<contrail>engines/engine[0]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
 	</params>
diff --git a/Models/Engines/NEO/PW1100GRight.xml b/Models/Engines/NEO/PW1100GRight.xml
index 49688197..6386eec8 100644
--- a/Models/Engines/NEO/PW1100GRight.xml
+++ b/Models/Engines/NEO/PW1100GRight.xml
@@ -13,7 +13,7 @@
 
 	<params>
 		<n1>engines/engine[4]/n1</n1>
-		<on-fire>systems/failures/engine-right-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-right-fire</on-fire>
 		<contrail>engines/engine[1]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
 	</params>
diff --git a/Models/Engines/XMLs/a320.engine.cfm.left.xml b/Models/Engines/XMLs/a320.engine.cfm.left.xml
index 4c53bba1..9dc92347 100644
--- a/Models/Engines/XMLs/a320.engine.cfm.left.xml
+++ b/Models/Engines/XMLs/a320.engine.cfm.left.xml
@@ -10,7 +10,7 @@
 
 	<params>
 		<n1>engines/engine[3]/n1</n1>
-		<on-fire>systems/failures/engine-left-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-left-fire</on-fire>
 		<contrail>engines/engine[0]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
 		<pylon-model-path>Aircraft/A320-family/Models/Engines/XMLs/a320.pylon.cfm.left.xml</pylon-model-path>
diff --git a/Models/Engines/XMLs/a320.engine.cfm.right.xml b/Models/Engines/XMLs/a320.engine.cfm.right.xml
index 9236f4f3..7b26c95f 100644
--- a/Models/Engines/XMLs/a320.engine.cfm.right.xml
+++ b/Models/Engines/XMLs/a320.engine.cfm.right.xml
@@ -10,7 +10,7 @@
 
 	<params>
 		<n1>engines/engine[4]/n1</n1>
-		<on-fire>systems/failures/engine-right-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-right-fire</on-fire>
 		<contrail>engines/engine[1]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
 		<pylon-model-path>Aircraft/A320-family/Models/Engines/XMLs/a320.pylon.cfm.right.xml</pylon-model-path>
diff --git a/Models/Engines/XMLs/a320.engine.iae.left.xml b/Models/Engines/XMLs/a320.engine.iae.left.xml
index 77daff5c..79fe8ccd 100644
--- a/Models/Engines/XMLs/a320.engine.iae.left.xml
+++ b/Models/Engines/XMLs/a320.engine.iae.left.xml
@@ -10,7 +10,7 @@
 
 	<params>
 		<n1>engines/engine[3]/n1</n1>
-		<on-fire>systems/failures/engine-left-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-left-fire</on-fire>
 		<contrail>engines/engine[0]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
 		<pylon-model-path>Aircraft/A320-family/Models/Engines/XMLs/a320.pylon.iae.left.xml</pylon-model-path>
diff --git a/Models/Engines/XMLs/a320.engine.iae.right.xml b/Models/Engines/XMLs/a320.engine.iae.right.xml
index e3ae99a8..6254b942 100644
--- a/Models/Engines/XMLs/a320.engine.iae.right.xml
+++ b/Models/Engines/XMLs/a320.engine.iae.right.xml
@@ -10,7 +10,7 @@
 
 	<params>
 		<n1>engines/engine[4]/n1</n1>
-		<on-fire>systems/failures/engine-right-fire</on-fire>
+		<on-fire>systems/failures/fire/engine-right-fire</on-fire>
 		<contrail>engines/engine[1]/contrail</contrail>
 		<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
 		<pylon-model-path>Aircraft/A320-family/Models/Engines/XMLs/a320.pylon.iae.right.xml</pylon-model-path>
diff --git a/Models/Fuselages/A320-100/fuselage.xml b/Models/Fuselages/A320-100/fuselage.xml
index 380343cb..e326fde7 100644
--- a/Models/Fuselages/A320-100/fuselage.xml
+++ b/Models/Fuselages/A320-100/fuselage.xml
@@ -32,7 +32,7 @@
 			<z-m>0.95</z-m>
 		</offsets>
 		<condition>
-			<property>systems/failures/apu-fire</property>
+			<property>systems/failures/fire/apu-fire</property>
 		</condition>
 	</model>
 
diff --git a/Models/Fuselages/A320/fuselage.xml b/Models/Fuselages/A320/fuselage.xml
index 380343cb..e326fde7 100644
--- a/Models/Fuselages/A320/fuselage.xml
+++ b/Models/Fuselages/A320/fuselage.xml
@@ -32,7 +32,7 @@
 			<z-m>0.95</z-m>
 		</offsets>
 		<condition>
-			<property>systems/failures/apu-fire</property>
+			<property>systems/failures/fire/apu-fire</property>
 		</condition>
 	</model>
 
diff --git a/Models/Fuselages/A320neo/fuselage.xml b/Models/Fuselages/A320neo/fuselage.xml
index 380343cb..e326fde7 100644
--- a/Models/Fuselages/A320neo/fuselage.xml
+++ b/Models/Fuselages/A320neo/fuselage.xml
@@ -32,7 +32,7 @@
 			<z-m>0.95</z-m>
 		</offsets>
 		<condition>
-			<property>systems/failures/apu-fire</property>
+			<property>systems/failures/fire/apu-fire</property>
 		</condition>
 	</model>
 
diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas
index 0a8232cc..295b33f0 100644
--- a/Nasal/ECAM/ECAM-logic.nas
+++ b/Nasal/ECAM/ECAM-logic.nas
@@ -663,7 +663,7 @@ var messages_priority_3 = func {
 	if (gearNotDownLocked.clearFlag == 0 and warningNodes.Logic.gearNotDownLocked.getBoolValue() and phaseVar3 != 3 and phaseVar3 != 4 and phaseVar3 != 5 and phaseVar3 != 8) {
 		gearNotDownLocked.active = 1;
 		
-		if (gearNotDownLockedRec.clearFlag == 0 and warningNodes.Logic.gearNotDownLockedFlipflop.getBoolValue()) {
+		if (gearNotDownLockedRec.clearFlag == 0 and !warningNodes.Logic.gearNotDownLockedFlipflop.getBoolValue()) {
 			gearNotDownLockedRec.active = 1;
 			gearNotDownLockedWork.active = 1;
 		} else {
@@ -721,47 +721,110 @@ var messages_priority_3 = func {
 		altAlertFlash = 0;
 	}
 	
-	if (!systems.cargoTestBtn.getBoolValue()) {
-		if (cargoSmokeFwd.clearFlag == 0 and systems.fwdCargoFireWarn.getBoolValue() and (phaseVar3 <= 3 or phaseVar3 >= 9 or phaseVar3 == 6)) {
-			cargoSmokeFwd.active = 1;
-		} elsif (cargoSmokeFwd.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
-			ECAM_controller.warningReset(cargoSmokeFwd);
-			cargoSmokeFwd.isMainMsg = 1;
+	if (cargoSmokeFwd.clearFlag == 0 and systems.fwdCargoFireWarn.getBoolValue() and (phaseVar3 <= 3 or phaseVar3 >= 9 or phaseVar3 == 6)) {
+		cargoSmokeFwd.active = 1;
+		
+		if (cargoSmokeFwdFans.clearFlag == 0 and systems.PNEU.Switch.cabinFans.getValue()) {
+			cargoSmokeFwdFans.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeFwdFans);
 		}
 		
-		if (cargoSmokeFwdAgent.clearFlag == 0 and cargoSmokeFwd.active == 1 and !getprop("/systems/fire/cargo/disch")) {
+		if (cargoSmokeFwdGrdClsd.clearFlag == 0 and (phaseVar3 == 1 or phaseVar3 == 10)) {
+			cargoSmokeFwdGrdClsd.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeFwdGrdClsd);
+		}
+		
+		if (cargoSmokeFwdAgent.clearFlag == 0 and !systems.cargoExtinguisherBottles.vector[0].lightProp.getValue()) {
 			cargoSmokeFwdAgent.active = 1;
 		} else {
 			ECAM_controller.warningReset(cargoSmokeFwdAgent);
-			cargoSmokeFwd.isMainMsg = 0;
-		}
-
-		if (cargoSmokeAft.clearFlag == 0 and systems.aftCargoFireWarn.getBoolValue() and (phaseVar3 <= 3 or phaseVar3 >= 9 or phaseVar3 == 6)) {
-			cargoSmokeAft.active = 1;
-		} elsif (cargoSmokeAft.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
-			ECAM_controller.warningReset(cargoSmokeAft);
-			cargoSmokeAft.isMainMsg = 1;
-			systems.cargoTestBtnOff.setBoolValue(0);
 		}
 		
-		if (cargoSmokeAftAgent.clearFlag == 0 and cargoSmokeAft.active == 1 and !getprop("/systems/fire/cargo/disch")) {
-			cargoSmokeAftAgent.active = 1;
+		if (FWC.Timer.gnd.getValue() == 0) {
+			cargoSmokeFwdGrd.active = 1;
 		} else {
-			ECAM_controller.warningReset(cargoSmokeAftAgent);
-			cargoSmokeAft.isMainMsg = 0;
+			ECAM_controller.warningReset(cargoSmokeFwdGrd);
+		}
+		
+		if (cargoSmokeFwdDoors.clearFlag == 0) {
+			cargoSmokeFwdDoors.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeFwdDoors);
+		}
+		
+		if (cargoSmokeFwdDisemb.clearFlag == 0) {
+			cargoSmokeFwdDisemb.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeFwdDisemb);
 		}
 	} else {
-		if (systems.aftCargoFireWarn.getBoolValue()) {
-			cargoSmokeFwd.active = 1;
-			cargoSmokeFwdAgent.active = 1;
-			cargoSmokeAft.active = 1;
+		ECAM_controller.warningReset(cargoSmokeFwd);
+		ECAM_controller.warningReset(cargoSmokeFwdFans);
+		ECAM_controller.warningReset(cargoSmokeFwdGrdClsd);
+		ECAM_controller.warningReset(cargoSmokeFwdAgent);
+		ECAM_controller.warningReset(cargoSmokeFwdGrd);
+		ECAM_controller.warningReset(cargoSmokeFwdDoors);
+		ECAM_controller.warningReset(cargoSmokeFwdDisemb);
+		systems.cargoTestBtnOff.setBoolValue(0);
+	}
+	
+	if (cargoSmokeAft.clearFlag == 0 and systems.aftCargoFireWarn.getBoolValue() and (phaseVar3 <= 3 or phaseVar3 >= 9 or phaseVar3 == 6)) {
+		cargoSmokeAft.active = 1;
+		
+		if (cargoSmokeAftFans.clearFlag == 0 and systems.PNEU.Switch.cabinFans.getValue()) {
+			cargoSmokeAftFans.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeAftFans);
+		}
+		
+		if (cargoSmokeAftGrdClsd.clearFlag == 0 and (phaseVar3 == 1 or phaseVar3 == 10)) {
+			cargoSmokeAftGrdClsd.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeAftGrdClsd);
+		}
+		
+		if (cargoSmokeAftAgent.clearFlag == 0 and !systems.cargoExtinguisherBottles.vector[1].lightProp.getValue()) {
 			cargoSmokeAftAgent.active = 1;
 		} else {
-			ECAM_controller.warningReset(cargoSmokeFwd);
-			ECAM_controller.warningReset(cargoSmokeFwdAgent);
-			ECAM_controller.warningReset(cargoSmokeAft);
 			ECAM_controller.warningReset(cargoSmokeAftAgent);
 		}
+		
+		if (FWC.Timer.gnd.getValue() == 0) {
+			cargoSmokeAftGrd.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeAftGrd);
+		}
+		
+		if (cargoSmokeAftDoors.clearFlag == 0) {
+			cargoSmokeAftDoors.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeAftDoors);
+		}
+		
+		if (cargoSmokeAftDisemb.clearFlag == 0) {
+			cargoSmokeAftDisemb.active = 1;
+		} else {
+			ECAM_controller.warningReset(cargoSmokeAftDisemb);
+		}
+	} else {
+		ECAM_controller.warningReset(cargoSmokeAft);
+		ECAM_controller.warningReset(cargoSmokeAftFans);
+		ECAM_controller.warningReset(cargoSmokeAftGrdClsd);
+		ECAM_controller.warningReset(cargoSmokeAftAgent);
+		ECAM_controller.warningReset(cargoSmokeAftGrd);
+		ECAM_controller.warningReset(cargoSmokeAftDoors);
+		ECAM_controller.warningReset(cargoSmokeAftDisemb);
+		systems.cargoTestBtnOff.setBoolValue(0);
+	}
+	
+	if (lavatorySmoke.clearFlag == 0 and systems.lavatoryFireWarn.getValue() and phaseVar3 != 4 and phaseVar3 != 5 and phaseVar3 != 7 and phaseVar3 != 8) {
+		lavatorySmoke.active = 1;
+		lavatorySmokeComm.active = 1;
+	} else {
+		ECAM_controller.warningReset(lavatorySmoke);
+		ECAM_controller.warningReset(lavatorySmokeComm);
 	}
 	
 	# ESS on BAT
@@ -2537,7 +2600,7 @@ var messages_right_memo = func {
 		ldg_inhibit.active = 0;
 	}
 	
-	if ((!pts.Gear.wow[1].getValue()) and (systems.ELEC.EmerElec.getValue() or getprop("/systems/fire/engine1/warning-active") == 1 or getprop("/systems/fire/engine2/warning-active") == 1 or getprop("/systems/fire/apu/warning-active") == 1 or getprop("/systems/failures/cargo-aft-fire") == 1 or getprop("/systems/failures/cargo-fwd-fire") == 1) or (((systems.HYD.Psi.green.getValue() < 1500 and pts.Engines.Engine.state[0].getValue() == 3) and (systems.HYD.Psi.yellow.getValue() < 1500 and pts.Engines.Engine.state[1].getValue() == 3)) or ((systems.HYD.Psi.green.getValue() < 1500 or systems.HYD.Psi.yellow.getValue() < 1500) and pts.Engines.Engine.state[0].getValue() == 3 and pts.Engines.Engine.state[1].getValue() == 3) and phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8)) {
+	if ((!pts.Gear.wow[1].getValue()) and (systems.ELEC.EmerElec.getValue() or getprop("/systems/fire/engine1/warning-active") == 1 or getprop("/systems/fire/engine2/warning-active") == 1 or getprop("/systems/fire/apu/warning-active") == 1 or getprop("/systems/failures/fire/cargo-aft-fire") == 1 or getprop("/systems/failures/fire/cargo-fwd-fire") == 1) or (((systems.HYD.Psi.green.getValue() < 1500 and pts.Engines.Engine.state[0].getValue() == 3) and (systems.HYD.Psi.yellow.getValue() < 1500 and pts.Engines.Engine.state[1].getValue() == 3)) or ((systems.HYD.Psi.green.getValue() < 1500 or systems.HYD.Psi.yellow.getValue() < 1500) and pts.Engines.Engine.state[0].getValue() == 3 and pts.Engines.Engine.state[1].getValue() == 3) and phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8)) {
 		# todo: emer elec
 		land_asap_r.active = 1;
 	} else {
diff --git a/Nasal/ECAM/ECAM-messages.nas b/Nasal/ECAM/ECAM-messages.nas
index 21e69225..26092743 100644
--- a/Nasal/ECAM/ECAM-messages.nas
+++ b/Nasal/ECAM/ECAM-messages.nas
@@ -161,8 +161,8 @@ var warnings				  = std.Vector.new([
 	
 	var gearNotDownLocked     = warning.new(msg: "L/G GEAR NOT DOWNLOCKED",   colour: "r", aural: 0, light: 0, isMainMsg: 1),
 	var gearNotDownLockedRec  = warning.new(msg: " -L/G LEVER......RECYCLE",  colour: "c"),
-	var gearNotDownLockedWork = warning.new(msg: "  •IF UNSUCCESSFUL:",       colour: "c"),
-	var gearNotDownLocked120  = warning.new(msg: "    AFTER 120S:",           colour: "c"),
+	var gearNotDownLockedWork = warning.new(msg: "  •IF UNSUCCESSFUL:",       colour: "w", isMainMsg: 1),
+	var gearNotDownLocked120  = warning.new(msg: "    AFTER 120S:",           colour: "w"),
 	var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN",  colour: "c"),
 	
 	# Autopilot off involuntary
@@ -170,15 +170,29 @@ var warnings				  = std.Vector.new([
 	
 	# Cargo smoke
 	var cargoSmokeFwd         = warning.new(msg: "SMOKE FWD CARGO SMOKE",     colour: "r", aural: 0, light: 0, isMainMsg: 1),
+	var cargoSmokeFwdFans     = warning.new(msg: " -CAB FANS...........OFF",  colour: "c"),
+	var cargoSmokeFwdGrdClsd  = warning.new(msg: " •IF FWD CRG CLSD:",        colour: "w", isMainMsg: 1),
 	var cargoSmokeFwdAgent    = warning.new(msg: " -AGENT............DISCH",  colour: "c"),
+	var cargoSmokeFwdGrd      = warning.new(msg: " •WHEN ON GROUND",          colour: "w", isMainMsg: 1),
+	var cargoSmokeFwdDoors    = warning.new(msg: " BEFORE OPEN CRG DOORS:",   colour: "w", isMainMsg: 1),
+	var cargoSmokeFwdDisemb   = warning.new(msg: "-PAX..........DISEMBARK",   colour: "c"),
 	var cargoSmokeAft         = warning.new(msg: "SMOKE AFT CARGO SMOKE",     colour: "r", aural: 0, light: 0, isMainMsg: 1),
+	var cargoSmokeAftFans     = warning.new(msg: " -CAB FANS...........OFF",  colour: "c"),
+	var cargoSmokeAftGrdClsd  = warning.new(msg: " •IF AFT CRG CLSD:",        colour: "w", isMainMsg: 1),
 	var cargoSmokeAftAgent    = warning.new(msg: " -AGENT............DISCH",  colour: "c"),
+	var cargoSmokeAftGrd      = warning.new(msg: " •WHEN ON GROUND",          colour: "w", isMainMsg: 1),
+	var cargoSmokeAftDoors    = warning.new(msg: " BEFORE OPEN CRG DOORS:",   colour: "w", isMainMsg: 1),
+	var cargoSmokeAftDisemb   = warning.new(msg: "-PAX..........DISEMBARK",   colour: "c"),
+	
+	# Lavatory SMOKE
+	var lavatorySmoke         = warning.new(msg: "SMOKE LAVATORY SMOKE     ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
+	var lavatorySmokeComm     = warning.new(msg: "-CKPT/CAB COM.ESTABLISH  ", colour: "c"),
 	
 	# ESS Bus on Bat
 	var essBusOnBat           = warning.new(msg: "ELEC ESS BUSES ON BAT",     colour: "r", aural: 0, light: 0, isMainMsg: 1),
-	var essBusOnBatLGUplock   = warning.new(msg: "   •WHEN L/G UPLOCKED :",   colour: "w"),
+	var essBusOnBatLGUplock   = warning.new(msg: "   •WHEN L/G UPLOCKED :",   colour: "w", isMainMsg: 1),
 	var essBusOnBatManOn      = warning.new(msg: " -EMER ELEC PWR...MAN ON",  colour: "c"),
-	var essBusOnBatRetract    = warning.new(msg: "  •IF L/G RETRACT FAULT:",  colour: "w"),
+	var essBusOnBatRetract    = warning.new(msg: "  •IF L/G RETRACT FAULT:",  colour: "w", isMainMsg: 1),
 	var essBusOnBatMinSpeed   = warning.new(msg: " MIN RAT SPD......180 KT",  colour: "c"),
 	var essBusOnBatLGCB       = warning.new(msg: " -LGCIU1 C/B (C09)..PULL",  colour: "c"),
 	var essBusOnBatManOn2     = warning.new(msg: " -EMER ELEC PWR...MAN ON",  colour: "c"),
diff --git a/Nasal/Systems/fire.nas b/Nasal/Systems/fire.nas
index 1a8cbb26..d7c74a47 100644
--- a/Nasal/Systems/fire.nas
+++ b/Nasal/Systems/fire.nas
@@ -17,6 +17,7 @@ var cargoTestBtnOff = props.globals.initNode("/controls/fire/cargo/test-off", 0,
 var eng1FireWarn = props.globals.initNode("/systems/fire/engine1/warning-active", 0, "BOOL");
 var eng2FireWarn = props.globals.initNode("/systems/fire/engine2/warning-active", 0, "BOOL");
 var apuFireWarn = props.globals.initNode("/systems/fire/apu/warning-active", 0, "BOOL");
+var lavatoryFireWarn = props.globals.getNode("/systems/fire/lavatory/warning", 1);
 var eng1Inop = props.globals.initNode("/systems/fire/engine1/det-inop", 0, "BOOL");
 var eng2Inop = props.globals.initNode("/systems/fire/engine2/det-inop", 0, "BOOL");
 var apuInop = props.globals.initNode("/systems/fire/apu/det-inop", 0, "BOOL");
@@ -40,8 +41,8 @@ var fire_init = func {
 	setprop("/controls/OH/protectors/aftdisch", 0);
 	setprop("/controls/fire/cargo/fwddisch", 0);
 	setprop("/controls/fire/cargo/aftdisch", 0);
-	setprop("/systems/failures/cargo-fwd-fire", 0);
-	setprop("/systems/failures/cargo-aft-fire", 0);
+	setprop("/systems/failures/fire/cargo-fwd-fire", 0);
+	setprop("/systems/failures/fire/cargo-aft-fire", 0);
 	setprop("/controls/fire/cargo/test", 0);
 	fire_timer.start();
 }
@@ -278,9 +279,9 @@ var detectorLoop = {
 		}
 	},
 	sendSignal: func(system, typeLoop) {
-		if (system == 0 and !getprop("/systems/failures/engine-left-fire")) { return; }
-		elsif (system == 1 and !getprop("/systems/failures/engine-right-fire")) { return; }
-		elsif (system == 2 and !getprop("/systems/failures/apu-fire")) { return; }
+		if (system == 0 and !getprop("/systems/failures/fire/engine-left-fire")) { return; }
+		elsif (system == 1 and !getprop("/systems/failures/fire/engine-right-fire")) { return; }
+		elsif (system == 2 and !getprop("/systems/failures/fire/apu-fire")) { return; }
 		engFireDetectorUnits.vector[system].receiveSignal(typeLoop);
 	}
 };
@@ -305,8 +306,8 @@ var cargoDetectorLoop = {
 		}
 	},
 	sendSignal: func(system, typeLoop) {
-		if ((system == 0 or system == 1) and !getprop("/systems/failures/cargo-aft-fire")) { return; }
-		elsif (system == 2 and !getprop("/systems/failures/cargo-fwd-fire")) { return; }
+		if ((system == 0 or system == 1) and !getprop("/systems/failures/fire/cargo-aft-fire")) { return; }
+		elsif (system == 2 and !getprop("/systems/failures/fire/cargo-fwd-fire")) { return; }
 		
 		cargoSmokeDetectorUnits.vector[system].receiveSignal(typeLoop);
 	}
@@ -490,29 +491,29 @@ var checkTwoInop2Timer = maketimer(0.1, checkTwoInop2);
 var checkTwoInop3Timer = maketimer(0.1, checkTwoInop3);
 
 # Create fire systems
-var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/apu-fire", "/controls/fire/apu-test-btn") ]);
-var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-fwd-fire")]);
+var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/fire/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/fire/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/fire/apu-fire", "/controls/fire/apu-test-btn") ]);
+var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-fwd-fire")]);
 
 # Create detector loops
 var engDetectorLoops = std.Vector.new([ 
-detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-left-fire"),  detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire"),
-detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire"),    detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-right-fire"),
-detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire"),               detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire") 
+detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-left-fire"),  detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire"),
+detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire"),    detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-right-fire"),
+detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire"),               detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire") 
 ]);
 
 var cargoDetectorLoops = std.Vector.new([ 
-cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
-cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
-cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire")
+cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
+cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
+cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire")
 ]);
 
 # Create extinguisher bottles
-var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"),
-extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"), 
-extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire", "/systems/fire/apu/warning-active") ]);
+var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"),
+extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"), 
+extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire", "/systems/fire/apu/warning-active") ]);
 
 # There is only one bottle but the system will think there are two, so other parts work
-var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
+var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
 
 # Create CIDS channels
 var CIDSchannels = std.Vector.new([CIDSchannel.new("/systems/electrical/bus/dc-ess"), CIDSchannel.new("/systems/electrical/bus/dc-2")]);
@@ -654,7 +655,7 @@ apuAgentTimerMakeTimerFunc = func() {
 }
 
 setlistener("/controls/fire/test-btn-1", func() {
-	if (getprop("/systems/failures/engine-left-fire")) { return; }
+	if (getprop("/systems/failures/fire/engine-left-fire")) { return; }
 	
 	if (testBtn.getValue() == 1) {
 		if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
@@ -667,7 +668,7 @@ setlistener("/controls/fire/test-btn-1", func() {
 }, 0, 0);
 
 setlistener("/controls/fire/test-btn-2", func() {
-	if (getprop("/systems/failures/engine-right-fire")) { return; }
+	if (getprop("/systems/failures/fire/engine-right-fire")) { return; }
 	if (testBtn2.getValue() == 1) {
 		if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
 			eng2FireWarn.setBoolValue(1);
@@ -679,7 +680,7 @@ setlistener("/controls/fire/test-btn-2", func() {
 }, 0, 0);
 
 setlistener("/controls/fire/apu-test-btn", func() {
-	if (getprop("/systems/failures/apu-fire")) { return; }
+	if (getprop("/systems/failures/fire/apu-fire")) { return; }
 	if (apuTestBtn.getValue() == 1) {
 		if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
 			apuFireWarn.setBoolValue(1);
@@ -691,7 +692,7 @@ setlistener("/controls/fire/apu-test-btn", func() {
 }, 0, 0);
 
 setlistener("/controls/fire/cargo/test", func() {
-	if (getprop("/systems/failures/aft-cargo-fire") or getprop("/systems/failures/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
+	if (getprop("/systems/failures/fire/aft-cargo-fire") or getprop("/systems/failures/fire/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
 	if (cargoTestBtn.getBoolValue()) {
 		cargoTestTime.setValue(elapsedTime.getValue());
 		cargoTestChecker.start();
diff --git a/Systems/a320-engine-fire.xml b/Systems/a320-engine-fire.xml
index 9778bf50..e43b8325 100644
--- a/Systems/a320-engine-fire.xml
+++ b/Systems/a320-engine-fire.xml
@@ -3,13 +3,13 @@
 <system name="A320: Engine Fire">
 
 	<channel name="Engine Fire" execrate="8">
-		<fcs_function name="enginefire1">
+		<fcs_function name="rubbish/enginefire1">
               <function>
 				<sum>
 					<property>/systems/fire/engine1/temperature</property>
 					<product>
 					   <table>
-							<independentVar lookup="row">/systems/failures/engine-left-fire</independentVar>
+							<independentVar lookup="row">/systems/failures/fire/engine-left-fire</independentVar>
 							<tableData>
 								0    -5
 							    1	 30
@@ -26,13 +26,13 @@
             <output>/systems/fire/engine1/temperature</output>
         </fcs_function>
 		
-		<fcs_function name="enginefire2">
+		<fcs_function name="rubbish/enginefire2">
               <function>
 				<sum>
 					<property>/systems/fire/engine2/temperature</property>
 					<product>
 					   <table>
-							<independentVar lookup="row">/systems/failures/engine-right-fire</independentVar>
+							<independentVar lookup="row">/systems/failures/fire/engine-right-fire</independentVar>
 							<tableData>
 								0    -5
 							    1	 30
@@ -49,13 +49,13 @@
             <output>/systems/fire/engine2/temperature</output>
         </fcs_function>
 		
-		<fcs_function name="apufire">
+		<fcs_function name="rubbish/apufire">
               <function>
 				<sum>
 					<property>/systems/fire/apu/temperature</property>
 					<product>
 					   <table>
-							<independentVar lookup="row">/systems/failures/apu-fire</independentVar>
+							<independentVar lookup="row">/systems/failures/fire/apu-fire</independentVar>
 							<tableData>
 								0    -5
 							    1	 45
@@ -74,13 +74,13 @@
 	</channel>
 	
 	<channel name="Cargo Fire" execrate="8">
-		<fcs_function name="fwdfire">
+		<fcs_function name="rubbish/fwdfire">
               <function>
 				<sum>
 					<property>/systems/fire/cargo/fwd/temperature</property>
 					<product>
 					   <table>
-							<independentVar lookup="row">/systems/failures/cargo-fwd-fire</independentVar>
+							<independentVar lookup="row">/systems/failures/fire/cargo-fwd-fire</independentVar>
 							<tableData>
 								0    -5
 							    1	 30
@@ -97,13 +97,13 @@
             <output>/systems/fire/cargo/fwd/temperature</output>
         </fcs_function>
 		
-		<fcs_function name="aftfire">
+		<fcs_function name="rubbish/aftfire">
               <function>
 				<sum>
 					<property>/systems/fire/cargo/aft/temperature</property>
 					<product>
 					   <table>
-							<independentVar lookup="row">/systems/failures/cargo-aft-fire</independentVar>
+							<independentVar lookup="row">/systems/failures/fire/cargo-aft-fire</independentVar>
 							<tableData>
 								0    -5
 							    1	 45
@@ -119,5 +119,35 @@
 			</clipto>
             <output>/systems/fire/cargo/aft/temperature</output>
         </fcs_function>
+		
+		<fcs_function name="rubbish/lavatory">
+              <function>
+				<sum>
+					<property>/systems/fire/lavatory/temperature</property>
+					<product>
+					   <table>
+							<independentVar lookup="row">/systems/failures/fire/lavatory-fire</independentVar>
+							<tableData>
+								0    -5
+							    1	 45
+							</tableData>
+						</table>
+						<property>simulation/channel-dt</property>
+					</product>
+				</sum>
+            </function>
+			<clipto>
+				<min>0</min>
+				<max>300</max>
+			</clipto>
+            <output>/systems/fire/lavatory/temperature</output>
+        </fcs_function>
+		
+		<switch name="/systems/fire/lavatory/warning">
+			<default value="0"/>
+			<test logic="OR" value="1">
+				/systems/fire/lavatory/temperature ge 295
+			</test>
+		</switch>
 	</channel>
 </system>