diff --git a/AircraftConfig/acconfig.nas b/AircraftConfig/acconfig.nas
index e8cc5544..136aff22 100644
--- a/AircraftConfig/acconfig.nas
+++ b/AircraftConfig/acconfig.nas
@@ -513,7 +513,7 @@ var takeoff = func {
 		# The same as taxi, except we set some things afterwards.
 		taxi();
 		var eng_one_chk_c = setlistener("/engines/engine[0]/state", func {
-			if (getprop("/engines/engine[0]/state") == 3) {
+			if (pts.Engines.Engine.state[0].getValue() == 3) {
 				removelistener(eng_one_chk_c);
 				setprop("/controls/switches/strobe", 1.0);
 				setprop("/controls/lighting/taxi-light-switch", 1);
diff --git a/AircraftConfig/load-flightplan.xml b/AircraftConfig/load-flightplan.xml
index 29103f04..99049b7e 100644
--- a/AircraftConfig/load-flightplan.xml
+++ b/AircraftConfig/load-flightplan.xml
@@ -74,6 +74,10 @@
 			<halign>left</halign>
 			<label>If you have a NAVIGRAPH subcription, we reccomend to load them in the MCDU instead of here.</label>
 		</text>
+		<text>
+			<halign>left</halign>
+			<label>Minimum FGFS version for use of this feature (due to bugs in prior versions) is 2020.1.3.</label>
+		</text>
 		<group>
 			<layout>hbox</layout>
 			<text>
@@ -85,7 +89,29 @@
 				<legend>Load flightplan</legend>
 				<equal>true</equal>
 				<enable>
-					<property>FMGC/internal/tofrom-set</property>
+					<and>
+						<property>FMGC/internal/tofrom-set</property>
+						<not>
+							<or>
+								<equals>
+									<property>/sim/version/flightgear</property>
+									<value>2019.2.0</value>
+								</equals>
+								<equals>
+									<property>/sim/version/flightgear</property>
+									<value>2020.1.0</value>
+								</equals>
+								<equals>
+									<property>/sim/version/flightgear</property>
+									<value>2020.1.1</value>
+								</equals>
+								<equals>
+									<property>/sim/version/flightgear</property>
+									<value>2020.1.2</value>
+								</equals>
+							</or>
+						</not>
+					</and>
 				</enable>
 				<binding>
 					<command>nasal</command>
diff --git a/Models/Instruments/MCDU/MCDU.nas b/Models/Instruments/MCDU/MCDU.nas
index 8f9a6b15..eecf6db9 100644
--- a/Models/Instruments/MCDU/MCDU.nas
+++ b/Models/Instruments/MCDU/MCDU.nas
@@ -3371,7 +3371,7 @@ var canvas_MCDU_base = {
 				me.fontLeft(0, 0, 0, symbol, 0, 0);
 			} else {
 				me["Simple_L1"].setText("SELECTED");
-				if (getprop("/it-autoflight/input/kts-mach")) {
+				if (fmgc.Input.ktsMach.getValue()) {
 					me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
 				} else {
 					me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/kts"))));
@@ -3389,10 +3389,10 @@ var canvas_MCDU_base = {
 			}
 			
 			me["Simple_L3S"].setText(" MANAGED");
-			if (getprop("/it-autoflight/input/kts-mach")) {
-				me["Simple_L3"].setText(sprintf(" %3.3f", getprop("/FMGC/internal/mng-spd")));
+			if (fmgc.Input.ktsMach.getValue()) {
+				me["Simple_L3"].setText(sprintf(" %3.3f", fmgc.FMGCInternal.mngSpd));
 			} else {
-				me["Simple_L3"].setText(sprintf(" %s", int(getprop("/FMGC/internal/mng-spd"))));
+				me["Simple_L3"].setText(sprintf(" %s", int(fmgc.FMGCInternal.mngSpd)));
 			}
 			
 			me["Simple_L5S"].setText(" EXPEDITE");
@@ -3512,7 +3512,7 @@ var canvas_MCDU_base = {
 				me.fontLeft(0, 0, 0, symbol, 0, 0);
 			} else {
 				me["Simple_L1"].setText("SELECTED");
-				if (getprop("/it-autoflight/input/kts-mach")) {
+				if (fmgc.Input.ktsMach.getValue()) {
 					me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
 				} else {
 					me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/kts"))));
@@ -3532,10 +3532,10 @@ var canvas_MCDU_base = {
 			me["Simple_L2S"].setText(" CI");
 			
 			me["Simple_L3S"].setText(" MANAGED");
-			if (getprop("/it-autoflight/input/kts-mach")) {
-				me["Simple_L3"].setText(sprintf(" %3.3f", getprop("/FMGC/internal/mng-spd")));
+			if (fmgc.Input.ktsMach.getValue()) {
+				me["Simple_L3"].setText(sprintf(" %3.3f", fmgc.FMGCInternal.mngSpd));
 			} else {
-				me["Simple_L3"].setText(sprintf(" %s", int(getprop("/FMGC/internal/mng-spd"))));
+				me["Simple_L3"].setText(sprintf(" %s", int(fmgc.FMGCInternal.mngSpd)));
 			}
 			
 			me["Simple_R1S"].setText("DEST EFOB");
@@ -3660,7 +3660,7 @@ var canvas_MCDU_base = {
 				me.fontLeft(0, 0, 0, symbol, 0, 0);
 			} else {
 				me["Simple_L1"].setText("SELECTED");
-				if (getprop("/it-autoflight/input/kts-mach")) {
+				if (fmgc.Input.ktsMach.getValue()) {
 					me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
 				} else {
 					me["Simple_L4"].setText(sprintf(" %3.0f", getprop("/it-autoflight/input/kts")));
@@ -3680,10 +3680,10 @@ var canvas_MCDU_base = {
 			me["Simple_L2S"].setText(" CI");
 			
 			me["Simple_L3S"].setText(" MANAGED");
-			if (getprop("/it-autoflight/input/kts-mach")) {
-				me["Simple_L3"].setText(sprintf(" %3.3f", getprop("/FMGC/internal/mng-spd")));
+			if (fmgc.Input.ktsMach.getValue()) {
+				me["Simple_L3"].setText(sprintf(" %3.3f", fmgc.FMGCInternal.mngSpd));
 			} else {
-				me["Simple_L3"].setText(sprintf(" %3.0f", getprop("/FMGC/internal/mng-spd")));
+				me["Simple_L3"].setText(sprintf(" %3.0f", fmgc.FMGCInternal.mngSpd));
 			}
 			
 			me["Simple_L5"].setText(" EXPEDITE");
diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas
index f7d5fc1c..9c1bcaf6 100644
--- a/Models/Instruments/PFD/PFD.nas
+++ b/Models/Instruments/PFD/PFD.nas
@@ -2023,7 +2023,6 @@ var canvas_PFD_2 = {
 				me["ASI_decimal_DN"].setColor(0.0901,0.6039,0.7176);
 			}
 			
-			tgt_ias = at_tgt_ias.getValue();
 			if (tgt_ias <= 30) {
 				me.ASItrgt = 0 - me.ASI;
 			} else if (tgt_ias >= 420) {
@@ -2146,7 +2145,7 @@ var canvas_PFD_2 = {
 				me["F_target"].hide();
 				me["clean_speed"].hide();
 				
-				tgt_S = tgt_S = fmgc.FMGCInternal.slat;
+				tgt_S = fmgc.FMGCInternal.slat;
 			
 				if (tgt_S <= 30) {
 					me.Strgt = 0 - me.ASI;
@@ -2180,7 +2179,7 @@ var canvas_PFD_2 = {
 				me["S_target"].hide();
 				me["clean_speed"].hide();
 				
-				tgt_F = tgt_S = fmgc.FMGCInternal.flap2;
+				tgt_F = fmgc.FMGCInternal.flap2;
 				
 				if (tgt_F <= 30) {
 					me.Ftrgt = 0 - me.ASI;
@@ -2214,7 +2213,7 @@ var canvas_PFD_2 = {
 				me["S_target"].hide();
 				me["clean_speed"].hide();
 				
-				tgt_F = tgt_S = fmgc.FMGCInternal.flap3;
+				tgt_F = fmgc.FMGCInternal.flap3;
 					
 				if (tgt_F <= 30) {
 					me.Ftrgt = 0 - me.ASI;
@@ -2253,7 +2252,7 @@ var canvas_PFD_2 = {
 				me["S_target"].hide();
 				me["F_target"].hide();
 				
-				tgt_clean = tgt_S = fmgc.FMGCInternal.clean;
+				tgt_clean = fmgc.FMGCInternal.clean;
 				
 				me.cleantrgt = tgt_clean - 30 - me.ASI;
 				me.SPDcleantrgtdiff = tgt_clean - ind_spd;
diff --git a/Models/Instruments/PFD/res/info.txt b/Models/Instruments/PFD/res/info.txt
new file mode 100644
index 00000000..d219aea5
--- /dev/null
+++ b/Models/Instruments/PFD/res/info.txt
@@ -0,0 +1,13 @@
+Heading Tape:	
+123.177	
+61.5885	
+
+98.5416 is 123.177 in 1024	
+49.2708 is 61.5885 in 1024	
+
+Altitude Tape:	
+304.178	
+60.8357	
+
+243.3424 is 304.178 in 1024	
+48.66856 is 60.8357 in 1024
\ No newline at end of file
diff --git a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
index a633a18f..884943d5 100644
--- a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
+++ b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
@@ -41,6 +41,14 @@ var fadecpowerup = props.globals.getNode("/systems/fadec/powerup", 1);
 var thr_limit = props.globals.getNode("/controls/engines/thrust-limit", 1);
 var n1_limit = props.globals.getNode("/controls/engines/n1-limit", 1);
 var epr_limit = props.globals.getNode("/controls/engines/epr-limit", 1);
+var flapXOffset = props.globals.getNode("/ECAM/Upper/FlapX", 1);
+var flapYOffset = props.globals.getNode("/ECAM/Upper/FlapY", 1);
+var slatXOffset = props.globals.getNode("/ECAM/Upper/SlatX", 1);
+var slatYOffset = props.globals.getNode("/ECAM/Upper/SlatY", 1);
+var flapXTranslate = props.globals.getNode("/ECAM/Upper/FlapXtrans", 1);
+var flapYTranslate = props.globals.getNode("/ECAM/Upper/FlapYtrans", 1);
+var slatXTranslate = props.globals.getNode("/ECAM/Upper/SlatXtrans", 1);
+var slatYTranslate = props.globals.getNode("/ECAM/Upper/SlatYtrans", 1);
 var ECAM_line1 = props.globals.getNode("/ECAM/msg/line1", 1);
 var ECAM_line2 = props.globals.getNode("/ECAM/msg/line2", 1);
 var ECAM_line3 = props.globals.getNode("/ECAM/msg/line3", 1);
@@ -119,6 +127,21 @@ var canvas_upperECAM_base = {
 		var svg_keys = me.getKeys();
 		foreach(var key; svg_keys) {
 			me[key] = canvas_group.getElementById(key);
+			
+			var clip_el = canvas_group.getElementById(key ~ "_clip");
+			if (clip_el != nil) {
+				clip_el.setVisible(0);
+				var tran_rect = clip_el.getTransformedBounds();
+
+				var clip_rect = sprintf("rect(%d,%d, %d,%d)", 
+				tran_rect[1], # 0 ys
+				tran_rect[2], # 1 xe
+				tran_rect[3], # 2 ye
+				tran_rect[0]); #3 xs
+				#   coordinates are top,right,bottom,left (ys, xe, ye, xs) ref: l621 of simgear/canvas/CanvasElement.cxx
+				me[key].set("clip", clip_rect);
+				me[key].set("clip-frame", canvas.Element.PARENT);
+			}
 		}
 		
 		# set font
@@ -297,6 +320,11 @@ var canvas_upperECAM_base = {
 			me["SlatAlphaLock"].hide();	
 		}
 		
+		me["FlapIndicator"].setTranslation(flapXOffset.getValue(),flapYOffset.getValue());
+		me["SlatIndicator"].setTranslation(slatXOffset.getValue(),slatYOffset.getValue());
+		me["FlapLine"].setTranslation(flapXTranslate.getValue(),flapYTranslate.getValue());
+		me["SlatLine"].setTranslation(slatXTranslate.getValue(),slatYTranslate.getValue());
+		
 		# FOB
 		if (acconfig_weight_kgs.getValue())
 		{
@@ -345,7 +373,7 @@ var canvas_upperECAM_cfm_eis2 = {
 		"EGT1-XX","N21","N21-decpnt","N21-decimal","N21-XX","FF1","FF1-XX","N12-needle","N12-thr","N12-ylim","N12","N12-decpnt","N12-decimal","N12-box","N12-scale","N12-scale2","N12-scaletick","N12-scalenum","N12-XX","N12-XX2","N12-XX-box","EGT2-needle","EGT2",
 		"EGT2-scale","EGT2-box","EGT2-scale2","EGT2-scaletick","EGT2-XX","N22","N22-decpnt","N22-decimal","N22-XX","FF2","FF2-XX","FOB-LBS","FlapTxt","FlapDots","N1Lim-mode","N1Lim","N1Lim-decpnt","N1Lim-decimal","N1Lim-percent","N1Lim-XX","N1Lim-XX2","REV1",
 		"REV1-box","REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8","ECAMR1", "ECAMR2", "ECAMR3", "ECAMR4", "ECAMR5", "ECAMR6", "ECAMR7", "ECAMR8", "ECAM_Right",
-		"FOB-weight-unit","FFlow-weight-unit","SlatAlphaLock"];
+		"FOB-weight-unit","FFlow-weight-unit","SlatAlphaLock","SlatIndicator","FlapIndicator","SlatLine","FlapLine"];
 	},
 	update: func() {
 		# N1
@@ -604,7 +632,7 @@ var canvas_upperECAM_iae_eis2 = {
 		"EPR2-decimal","EPR2-box","EPR2-scale","EPR2-scaletick","EPR2-scalenum","EPR2-XX","EPR2-XX2","EGT2-needle","EGT2","EGT2-scale","EGT2-scale2","EGT2-box","EGT2-scaletick","EGT2-XX","N12-needle","N12-thr","N12-ylim","N12","N12-decpnt","N12-decimal",
 		"N12-scale","N12-scale2","N12-scaletick","N12-scalenum","N12-XX","N22","N22-decpnt","N22-decimal","N22-XX","FF2","FF2-XX","FOB-LBS","FlapTxt","FlapDots","EPRLim-mode","EPRLim","EPRLim-decpnt","EPRLim-decimal","EPRLim-XX","EPRLim-XX2","REV1","REV1-box",
 		"REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8", "ECAMR1", "ECAMR2", "ECAMR3", "ECAMR4", "ECAMR5", "ECAMR6", "ECAMR7", "ECAMR8", "ECAM_Right",
-		"FFlow1-weight-unit", "FFlow2-weight-unit", "FOB-weight-unit","SlatAlphaLock"];
+		"FFlow1-weight-unit", "FFlow2-weight-unit", "FOB-weight-unit","SlatAlphaLock","SlatIndicator","FlapIndicator","SlatLine","FlapLine"];
 	},
 	update: func() {
 		N1_1_cur = N1_1.getValue();
@@ -927,6 +955,21 @@ var canvas_upperECAM_test = {
 		var svg_keys = me.getKeys();
 		foreach(var key; svg_keys) {
 			me[key] = canvas_group.getElementById(key);
+			
+			var clip_el = canvas_group.getElementById(key ~ "_clip");
+			if (clip_el != nil) {
+				clip_el.setVisible(0);
+				var tran_rect = clip_el.getTransformedBounds();
+
+				var clip_rect = sprintf("rect(%d,%d, %d,%d)", 
+				tran_rect[1], # 0 ys
+				tran_rect[2], # 1 xe
+				tran_rect[3], # 2 ye
+				tran_rect[0]); #3 xs
+				#   coordinates are top,right,bottom,left (ys, xe, ye, xs) ref: l621 of simgear/canvas/CanvasElement.cxx
+				me[key].set("clip", clip_rect);
+				me[key].set("clip-frame", canvas.Element.PARENT);
+			}
 		}
 
 		me.page = canvas_group;
diff --git a/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg b/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
index 78585ba0..7ebab94f 100644
--- a/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
+++ b/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
@@ -41,9 +41,9 @@
      inkscape:window-height="705"
      id="namedview371"
      showgrid="true"
-     inkscape:zoom="0.50000001"
-     inkscape:cx="419.64115"
-     inkscape:cy="1000.4352"
+     inkscape:zoom="1"
+     inkscape:cx="718.57047"
+     inkscape:cy="505.8628"
      inkscape:window-x="-8"
      inkscape:window-y="-8"
      inkscape:window-maximized="1"
@@ -76,11 +76,6 @@
      height="8.496521"
      x="691.55396"
      y="692.57446" />
-  <path
-     id="path4447"
-     style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 718.11442,596.89138 11.4047,16.81213 m -36.4425,-17.34853 -10.5797,15.51213 m 11.1047,-15.46213 24.4703,0.46213 m -35.5703,14.98787 47.0582,1.94289"
-     inkscape:connector-curvature="0" />
   <text
      inkscape:label="#text4219"
      id="FlapTxt"
@@ -94,6 +89,13 @@
        x="729.04968"
        id="tspan4331"
        sodipodi:role="line">1+F</tspan></text>
+  <path
+     style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.23279285;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+     d="M 917.38445,644.30596 720.66027,597.47244"
+     id="FlapLine"
+     sodipodi:nodetypes="cc"
+     inkscape:label="#path1103"
+     inkscape:connector-curvature="0" />
   <g
      id="FlapDots"
      inkscape:label="#g4344"
@@ -102,11 +104,11 @@
        sodipodi:nodetypes="ccccc"
        inkscape:connector-curvature="0"
        id="rect4346"
-       d="m 636.15001,595.05001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
+       d="m 636.16173,590.75725 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 590.60001,606.45001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
+       d="m 590.60001,605.24377 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
        id="path4349"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -118,7 +120,7 @@
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 821.6363,589.13181 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 821.6363,592.59471 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        id="path4353"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -126,11 +128,11 @@
        sodipodi:nodetypes="ccccc"
        inkscape:connector-curvature="0"
        id="path4355"
-       d="m 867.18574,600.69907 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 867.18574,603.7664 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 913.00626,612.50775 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 913.00626,615.19254 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        id="path4357"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -1385,4 +1387,45 @@
        x="650.08069"
        y="575.68427"
        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75">A-LOCK</tspan></text>
+  <path
+     style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.44862556;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+     d="M 555.26245,639.8335 691.24239,597.33411"
+     id="SlatLine"
+     inkscape:original-d="m 555.22993,639.86602 135.34892,-43.9598"
+     inkscape:label="#path1119"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     id="path4447"
+     style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
+     d="m 718.11442,596.89138 11.4047,16.81213 m -35.92874,-17.24909 -11.09346,15.41269 m 11.13785,-15.41241 24.43715,0.41241 m -35.5703,14.98787 47.0582,1.94289"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+     d="m 928.84849,661.23101 -11.44541,-16.90649 38.53701,7.25587 v 15.15993 l -27.0916,-5.50931"
+     id="FlapIndicator"
+     sodipodi:nodetypes="ccccc"
+     inkscape:label="#path1093" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+     d="m 530.43575,645.52404 24.69434,-5.55908 -11.10498,15.46142 -24.69434,5.56055 z"
+     id="SlatIndicator"
+     inkscape:label="#path1114" />
+  <rect
+     style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:4.08072662;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
+     id="FlapLine_clip"
+     width="195.52469"
+     height="50.843338"
+     x="718.86694"
+     y="594.42938"
+     inkscape:label="#rect1023" />
+  <rect
+     inkscape:label="#rect1023"
+     y="594.05438"
+     x="554.93781"
+     height="48.089657"
+     width="137.63597"
+     id="SlatLine_clip"
+     style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
 </svg>
diff --git a/Models/Instruments/Upper-ECAM/res/iae-eis2.svg b/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
index 547e0e60..627986e2 100644
--- a/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
+++ b/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
@@ -97,11 +97,6 @@
      height="8.496521"
      x="691.55396"
      y="692.57446" />
-  <path
-     id="path4447"
-     style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 718.11442,596.89138 11.4047,16.81213 m -36.4425,-17.34853 -10.5797,15.51213 m 11.1047,-15.46213 24.4703,0.46213 m -35.5703,14.98787 47.0582,1.94289"
-     inkscape:connector-curvature="0" />
   <text
      inkscape:label="#text4219"
      id="FlapTxt"
@@ -115,6 +110,13 @@
        x="729.04968"
        id="tspan4331"
        sodipodi:role="line">1+F</tspan></text>
+  <path
+     style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.23279285;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+     d="M 917.38445,644.30596 720.66027,597.47244"
+     id="FlapLine"
+     sodipodi:nodetypes="cc"
+     inkscape:label="#path1103"
+     inkscape:connector-curvature="0" />
   <g
      id="FlapDots"
      inkscape:label="#g4344"
@@ -123,11 +125,11 @@
        sodipodi:nodetypes="ccccc"
        inkscape:connector-curvature="0"
        id="rect4346"
-       d="m 636.15001,595.05001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
+       d="m 636.16173,590.75725 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 590.60001,606.45001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
+       d="m 590.60001,605.24377 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
        id="path4349"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -139,7 +141,7 @@
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 821.6363,589.13181 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 821.6363,592.59471 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        id="path4353"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -147,11 +149,11 @@
        sodipodi:nodetypes="ccccc"
        inkscape:connector-curvature="0"
        id="path4355"
-       d="m 867.18574,600.69907 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 867.18574,603.7664 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
     <path
        style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 913.00626,612.50775 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
+       d="m 913.00626,615.19254 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
        id="path4357"
        inkscape:connector-curvature="0"
        sodipodi:nodetypes="ccccc" />
@@ -1753,4 +1755,45 @@
        x="650.08069"
        y="575.68427"
        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75">A-LOCK</tspan></text>
+   <path
+     style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.44862556;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+     d="M 555.26245,639.8335 691.24239,597.33411"
+     id="SlatLine"
+     inkscape:original-d="m 555.22993,639.86602 135.34892,-43.9598"
+     inkscape:label="#path1119"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     id="path4447"
+     style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
+     d="m 718.11442,596.89138 11.4047,16.81213 m -35.92874,-17.24909 -11.09346,15.41269 m 11.13785,-15.41241 24.43715,0.41241 m -35.5703,14.98787 47.0582,1.94289"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+     d="m 928.84849,661.23101 -11.44541,-16.90649 38.53701,7.25587 v 15.15993 l -27.0916,-5.50931"
+     id="FlapIndicator"
+     sodipodi:nodetypes="ccccc"
+     inkscape:label="#path1093" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+     d="m 530.43575,645.52404 24.69434,-5.55908 -11.10498,15.46142 -24.69434,5.56055 z"
+     id="SlatIndicator"
+     inkscape:label="#path1114" />
+  <rect
+     style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:4.08072662;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
+     id="FlapLine_clip"
+     width="195.52469"
+     height="50.843338"
+     x="718.86694"
+     y="594.42938"
+     inkscape:label="#rect1023" />
+  <rect
+     inkscape:label="#rect1023"
+     y="594.05438"
+     x="554.93781"
+     height="48.089657"
+     width="137.63597"
+     id="SlatLine_clip"
+     style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
 </svg>
diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas
index 86ca53b6..1993baa4 100644
--- a/Nasal/ECAM/ECAM-logic.nas
+++ b/Nasal/ECAM/ECAM-logic.nas
@@ -12,7 +12,6 @@ var emerGen      = props.globals.getNode("/controls/electrical/switches/emer-gen
 
 var state1Node = props.globals.getNode("/engines/engine[0]/state", 1);
 var state2Node = props.globals.getNode("/engines/engine[1]/state", 1);
-var apu_rpm    = props.globals.getNode("/engines/engine[2]/n1", 1);
 var wing_pb    = props.globals.getNode("/controls/ice-protection/wing", 1);
 var apu_bleedSw   = props.globals.getNode("/controls/pneumatics/switches/apu", 1);
 var gear       = props.globals.getNode("/gear/gear-pos-norm", 1);
@@ -21,6 +20,8 @@ var cutoff2    = props.globals.getNode("/controls/engines/engine[1]/cutoff-switc
 var stallVoice = props.globals.initNode("/sim/sound/warnings/stall-voice", 0, "BOOL");
 var engOpt     = props.globals.getNode("/options/eng", 1);
 
+var thrustState = [nil, nil];
+
 # local variables
 var transmitFlag1 = 0;
 var transmitFlag2 = 0;
@@ -169,13 +170,13 @@ var messages_priority_3 = func {
 			ECAM_controller.warningReset(dualFailAPU);
 		}
 		
-		if (dualFailAPUwing.clearFlag == 0 and apu_rpm.getValue() > 94.9 and wing_pb.getBoolValue()) {
+		if (dualFailAPUwing.clearFlag == 0 and pts.APU.rpm.getValue() > 94.9 and wing_pb.getBoolValue()) {
 			dualFailAPUwing.active = 1;
 		} else {
 			ECAM_controller.warningReset(dualFailAPUwing);
 		}
 		
-		if (dualFailAPUbleed.clearFlag == 0 and apu_rpm.getValue() > 94.9 and !apu_bleedSw.getBoolValue()) {
+		if (dualFailAPUbleed.clearFlag == 0 and pts.APU.rpm.getValue() > 94.9 and !apu_bleedSw.getBoolValue()) {
 			dualFailAPUbleed.active = 1;
 		} else {
 			ECAM_controller.warningReset(dualFailAPUbleed);
@@ -369,7 +370,7 @@ var messages_priority_3 = func {
 				ECAM_controller.warningReset(eng1FireGnlever);
 			}
 			
-			if (eng1FireGnparkbrk.clearFlag == 0 and getprop("/controls/gear/brake-parking") == 0) { 
+			if (eng1FireGnparkbrk.clearFlag == 0 and pts.Controls.Gear.parkingBrake.getValue() == 0) { 
 				eng1FireGnstopped.active = 1;
 				eng1FireGnparkbrk.active = 1;
 			} else {
@@ -427,7 +428,7 @@ var messages_priority_3 = func {
 				ECAM_controller.warningReset(eng1FireGnevacSw);
 			}
 			
-			if (eng1FireGnevacApu.clearFlag == 0 and getprop("/controls/apu/master") and getprop("/engines/engine[2]/n1") > 99) {
+			if (eng1FireGnevacApu.clearFlag == 0 and systems.APUNodes.Controls.master.getBoolValue() and pts.APU.rpm.getValue() > 99) {
 				eng1FireGnevacApu.active = 1;
 			} else {
 				ECAM_controller.warningReset(eng1FireGnevacApu);
@@ -552,7 +553,7 @@ var messages_priority_3 = func {
 				ECAM_controller.warningReset(eng2FireGnlever);
 			}
 			
-			if (eng2FireGnparkbrk.clearFlag == 0 and getprop("/controls/gear/brake-parking") == 0) { 
+			if (eng2FireGnparkbrk.clearFlag == 0 and pts.Controls.Gear.parkingBrake.getValue() == 0) { 
 				eng2FireGnstopped.active = 1;
 				eng2FireGnparkbrk.active = 1;
 			} else {
@@ -610,7 +611,7 @@ var messages_priority_3 = func {
 				ECAM_controller.warningReset(eng2FireGnevacSw);
 			}
 			
-			if (eng2FireGnevacApu.clearFlag == 0 and getprop("/controls/apu/master") and getprop("/engines/engine[2]/n1") > 99) {
+			if (eng2FireGnevacApu.clearFlag == 0 and systems.APUNodes.Controls.master.getBoolValue() and pts.APU.rpm.getValue() > 99) {
 				eng2FireGnevacApu.active = 1;
 			} else {
 				ECAM_controller.warningReset(eng2FireGnevacApu);
@@ -685,7 +686,7 @@ var messages_priority_3 = func {
 			ECAM_controller.warningReset(apuFireAgent);
 		}
 		
-		if (apuFireMaster.clearFlag == 0 and getprop("/controls/apu/master")) {
+		if (apuFireMaster.clearFlag == 0 and systems.APUNodes.Controls.master.getBoolValue()) {
 			apuFireMaster.active = 1;
 		} else {
 			ECAM_controller.warningReset(apuFireMaster);
@@ -714,7 +715,7 @@ var messages_priority_3 = func {
 		ECAM_controller.warningReset(flaps_config_1);
 	}
 	
-	if ((spd_brk_config.clearFlag == 0) and getprop("/controls/flight/speedbrake") != 0 and phaseVar3 >= 3 and phaseVar3 <= 4) {
+	if ((spd_brk_config.clearFlag == 0) and pts.Controls.Flight.speedbrake.getValue() != 0 and phaseVar3 >= 3 and phaseVar3 <= 4) {
 		spd_brk_config.active = 1;
 		spd_brk_config_1.active = 1;
 	} else {
@@ -738,7 +739,7 @@ var messages_priority_3 = func {
 		ECAM_controller.warningReset(rud_trim_config_1);
 	}
 	
-	if ((park_brk_config.clearFlag == 0) and getprop("/controls/gear/brake-parking") == 1 and phaseVar3 >= 3 and phaseVar3 <= 4) {
+	if ((park_brk_config.clearFlag == 0) and pts.Controls.Gear.parkingBrake.getValue() == 1 and phaseVar3 >= 3 and phaseVar3 <= 4) {
 		park_brk_config.active = 1;
 	} else {
 		ECAM_controller.warningReset(park_brk_config);
@@ -764,7 +765,7 @@ var messages_priority_3 = func {
 		alt750 = 0;
 	}
 	
-	if (FWC.altChg.getValue() or pts.Gear.position[0].getValue() == 1 or (getprop("/controls/gear/gear-down") and pts.Fdm.JSBsim.Fcs.slatDeg.getValue() > 4) or fmgc.Output.vert.getValue() == 2) {
+	if (FWC.altChg.getValue() or pts.Gear.position[0].getValue() == 1 or (pts.Controls.Gear.gearDown.getValue() and pts.Fdm.JSBsim.Fcs.slatDeg.getValue() > 4) or fmgc.Output.vert.getValue() == 2) {
 		altAlertInhibit = 1;
 	} else {
 		altAlertInhibit = 0;
@@ -873,7 +874,7 @@ var messages_priority_3 = func {
 	}
 	
 	# ESS on BAT
-	if ((!gear.getValue() or !getprop("/controls/gear/gear-down")) and getprop("/systems/electrical/some-electric-thingie/static-inverter-timer") == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) {
+	if ((!gear.getValue() or !pts.Controls.Gear.gearDown.getValue()) and getprop("/systems/electrical/some-electric-thingie/static-inverter-timer") == 1 and phaseVar3 >= 5 and phaseVar3 <= 7) {
 		essBusOnBat.active = 1;
 		essBusOnBatLGUplock.active = 1;
 		essBusOnBatManOn.active = 1;
@@ -890,7 +891,7 @@ var messages_priority_3 = func {
 	}
 	
 	# EMER CONFIG
-	if (getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dualFailNode.getBoolValue() and phaseVar3 != 4 and phaseVar3 != 8 and emerconfig.clearFlag == 0 and !getprop("/systems/acconfig/autoconfig-running")) {
+	if (systems.ELEC.EmerElec.getValue() and !dualFailNode.getBoolValue() and phaseVar3 != 4 and phaseVar3 != 8 and emerconfig.clearFlag == 0 and !getprop("/systems/acconfig/autoconfig-running")) {
 		emerconfig.active = 1;
 		
 		if (getprop("/systems/hydraulic/sources/rat/position") != 0 and emerconfigMinRat.clearFlag == 0) {
@@ -1022,7 +1023,7 @@ var messages_priority_3 = func {
 var messages_priority_2 = func {
 	phaseVar2 = phaseNode.getValue();
 	# DC EMER CONFIG
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcEmerconfig.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcEmerconfig.clearFlag == 0) {
 		dcEmerconfig.active = 1;
 		dcEmerconfigManOn.active = 1;
 	} else {
@@ -1030,7 +1031,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(dcEmerconfigManOn);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dcEmerconfig.active and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus12Fault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and !dcEmerconfig.active and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus12Fault.clearFlag == 0) {
 		dcBus12Fault.active = 1;
 		dcBus12FaultBlower.active = 1;
 		dcBus12FaultExtract.active = 1;
@@ -1046,7 +1047,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(dcBus12FaultBrking);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.acEss.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBusEssFault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.acEss.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBusEssFault.clearFlag == 0) {
 		AcBusEssFault.active = 1;
 		if (!systems.ELEC.Switch.acEssFeed.getBoolValue()) {
 			AcBusEssFaultFeed.active = 1;
@@ -1060,7 +1061,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(AcBusEssFaultAtc);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.ac1.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBus1Fault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.ac1.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBus1Fault.clearFlag == 0) {
 		AcBus1Fault.active = 1;
 		AcBus1FaultBlower.active = 1;
 	} else {
@@ -1082,7 +1083,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(DcEssBusFaultGPWS);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.ac2.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBus2Fault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.ac2.getValue() < 110 and phaseVar2 != 4 and phaseVar2 != 8 and AcBus2Fault.clearFlag == 0) {
 		AcBus2Fault.active = 1;
 		AcBus2FaultExtract.active = 1;
 	} else {
@@ -1090,7 +1091,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(AcBus2FaultExtract);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() >= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus1Fault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() >= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus1Fault.clearFlag == 0) {
 		dcBus1Fault.active = 1;
 		dcBus1FaultBlower.active = 1;
 		dcBus1FaultExtract.active = 1;
@@ -1100,7 +1101,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(dcBus1FaultExtract);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dc1.getValue() >= 25 and systems.ELEC.Bus.dc2.getValue() <= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus2Fault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.dc1.getValue() >= 25 and systems.ELEC.Bus.dc2.getValue() <= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBus2Fault.clearFlag == 0) {
 		dcBus2Fault.active = 1;
 		dcBus2FaultAirData.active = 1;
 		dcBus2FaultBaro.active = 1;
@@ -1110,13 +1111,13 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(dcBus2FaultBaro);
 	}
 	
-	if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dcEmerconfig.active and systems.ELEC.Bus.dcBat.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8 and dcBusBatFault.clearFlag == 0) {
+	if (!systems.ELEC.EmerElec.getValue() and !dcEmerconfig.active and systems.ELEC.Bus.dcBat.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8 and dcBusBatFault.clearFlag == 0) {
 		dcBusBatFault.active = 1;
 	} else {
 		ECAM_controller.warningReset(dcBusBatFault);
 	}
 	
-	if (!(getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.dcEssShed.getValue() < 25 and systems.ELEC.Bus.dcEss.getValue() >= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBusEssShed.clearFlag == 0) {
+	if (!(systems.ELEC.EmerElec.getValue() and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.dcEssShed.getValue() < 25 and systems.ELEC.Bus.dcEss.getValue() >= 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcBusEssShed.clearFlag == 0) {
 		dcBusEssShed.active = 1;
 		dcBusEssShedExtract.active = 1;
 		dcBusEssShedIcing.active = 1;
@@ -1126,9 +1127,9 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(dcBusEssShedIcing);
 	}
 	
-	if (!(getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.acEssShed.getValue() < 110 and systems.ELEC.Bus.acEss.getValue() >= 110 and phaseVar2 != 4 and phaseVar2 != 8 and acBusEssShed.clearFlag == 0) {
+	if (!(systems.ELEC.EmerElec.getValue() and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.acEssShed.getValue() < 110 and systems.ELEC.Bus.acEss.getValue() >= 110 and phaseVar2 != 4 and phaseVar2 != 8 and acBusEssShed.clearFlag == 0) {
 		acBusEssShed.active = 1;
-		if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config")) {
+		if (!systems.ELEC.EmerElec.getValue()) {
 			acBusEssShedAtc.active = 1;
 		} else {
 			ECAM_controller.warningReset(acBusEssShed);
@@ -1160,7 +1161,7 @@ var messages_priority_2 = func {
 	}
 	
 	
-	if ((athr_lim.clearFlag == 0) and getprop("it-autoflight/output/athr") == 1 and ((getprop("/systems/thrust/eng-out") != 1 and (getprop("/systems/thrust/state1") == "MAN" or getprop("/systems/thrust/state2") == "MAN")) or (getprop("/systems/thrust/eng-out") == 1 and (getprop("/systems/thrust/state1") == "MAN" or getprop("/systems/thrust/state2") == "MAN" or (getprop("/systems/thrust/state1") == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83) or (getprop("/systems/thrust/state2") == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83)))) and (phaseVar2 >= 5 and phaseVar2 <= 7)) {
+	if ((athr_lim.clearFlag == 0) and getprop("it-autoflight/output/athr") == 1 and ((getprop("/systems/thrust/eng-out") != 1 and (pts.Systems.Thrust.state[0].getValue() == "MAN" or pts.Systems.Thrust.state[1].getValue() == "MAN")) or (getprop("/systems/thrust/eng-out") == 1 and (pts.Systems.Thrust.state[0].getValue() == "MAN" or pts.Systems.Thrust.state[1].getValue() == "MAN" or (pts.Systems.Thrust.state[0].getValue() == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83) or (pts.Systems.Thrust.state[1].getValue() == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83)))) and (phaseVar2 >= 5 and phaseVar2 <= 7)) {
 		athr_lim.active = 1;
 		athr_lim_1.active = 1;
 	} else {
@@ -1298,7 +1299,7 @@ var messages_priority_2 = func {
 		ECAM_controller.warningReset(apuEmerShutdown);
 	}
 	
-	if (apuEmerShutdownMast.clearFlag == 0 and getprop("/controls/apu/master") and apuEmerShutdown.active == 1) {
+	if (apuEmerShutdownMast.clearFlag == 0 and systems.APUNodes.Controls.master.getBoolValue() and apuEmerShutdown.active == 1) {
 		apuEmerShutdownMast.active = 1;
 	} else {
 		ECAM_controller.warningReset(apuEmerShutdownMast);
@@ -2027,7 +2028,7 @@ var messages_priority_0 = func {
 
 var messages_config_memo = func {
 	phaseVarMemo = phaseNode.getValue();
-	if (getprop("/controls/flight/flaps-input") == 0 or getprop("/controls/flight/flaps-input") == 4 or getprop("/controls/flight/speedbrake") != 0 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") > 1.75 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") < -3.65 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") < -3.55 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") > 3.55) {
+	if (getprop("/controls/flight/flaps-input") == 0 or getprop("/controls/flight/flaps-input") == 4 or pts.Controls.Flight.speedbrake.getValue() != 0 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") > 1.75 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") < -3.65 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") < -3.55 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") > 3.55) {
 		setprop("/ECAM/to-config-normal", 0);
 	} else {
 		setprop("/ECAM/to-config-normal", 1);
@@ -2069,7 +2070,7 @@ var messages_config_memo = func {
 		toMemoLine3.colour = "c";
 	}
 	
-	if (getprop("/controls/flight/flaps-pos") > 0 and getprop("/controls/flight/flaps-pos") < 5) {
+	if (pts.Controls.Flight.flapsPos.getValue() > 0 and pts.Controls.Flight.flapsPos.getValue() < 5) {
 		toMemoLine4.msg = "    FLAPS T.O";
 		toMemoLine4.colour = "g";
 	} else {
@@ -2136,7 +2137,7 @@ var messages_config_memo = func {
 	}
 	
 	if (getprop("it-fbw/law") == 1 or getprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override")) {
-		if (getprop("/controls/flight/flaps-pos") == 4) {
+		if (pts.Controls.Flight.flapsPos.getValue() == 4) {
 			ldgMemoLine4.msg = "    FLAPS CONF 3";
 			ldgMemoLine4.colour = "g";
 		} else {
@@ -2144,7 +2145,7 @@ var messages_config_memo = func {
 			ldgMemoLine4.colour = "c";
 		}
 	} else {
-		if (getprop("/controls/flight/flaps-pos") == 5) {
+		if (pts.Controls.Flight.flapsPos.getValue() == 5) {
 			ldgMemoLine4.msg = "    FLAPS FULL";
 			ldgMemoLine4.colour = "g";
 		} else {
@@ -2296,14 +2297,14 @@ var messages_right_memo = func {
 		ldg_inhibit.active = 0;
 	}
 	
-	if ((!pts.Gear.wow[1].getValue()) and (getprop("/systems/electrical/some-electric-thingie/emer-elec-config") 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 (((getprop("/systems/hydraulic/green-psi") < 1500 and getprop("/engines/engine[0]/state") == 3) and (getprop("/systems/hydraulic/yellow-psi") < 1500 and getprop("/engines/engine[1]/state") == 3)) or ((getprop("/systems/hydraulic/green-psi") < 1500 or getprop("/systems/hydraulic/yellow-psi") < 1500) and getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") == 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/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)) {
 		# todo: emer elec
 		land_asap_r.active = 1;
 	} else {
 		land_asap_r.active = 0;
 	}
 	
-	if (land_asap_r.active == 0 and !pts.Gear.wow[1].getValue() and ((getprop("/fdm/jsbsim/propulsion/tank[0]/contents-lbs") < 1650 and getprop("/fdm/jsbsim/propulsion/tank[1]/contents-lbs") < 1650) or ((getprop("/systems/electrical/bus/dc-2") < 25 and (getprop("/systems/failures/fctl/elac1") == 1 or getprop("/systems/failures/fctl/sec1") == 1)) or (getprop("/systems/hydraulic/green-psi") < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (getprop("/systems/hydraulic/yellow-psi") < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (getprop("/systems/hydraulic/blue-psi") < 1500 and (getprop("/systems/failures/fctl/elac2") == 1 and getprop("/systems/failures/fctl/sec2") == 1))) or (phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8 and (getprop("/engines/engine[0]/state") != 3 or getprop("/engines/engine[1]/state") != 3)))) {
+	if (land_asap_r.active == 0 and !pts.Gear.wow[1].getValue() and ((getprop("/fdm/jsbsim/propulsion/tank[0]/contents-lbs") < 1650 and getprop("/fdm/jsbsim/propulsion/tank[1]/contents-lbs") < 1650) or ((getprop("/systems/electrical/bus/dc-2") < 25 and (getprop("/systems/failures/fctl/elac1") == 1 or getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.green.getValue() < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.yellow.getValue() < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.blue.getValue() < 1500 and (getprop("/systems/failures/fctl/elac2") == 1 and getprop("/systems/failures/fctl/sec2") == 1))) or (phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8 and (pts.Engines.Engine.state[0].getValue() != 3 or pts.Engines.Engine.state[1].getValue() != 3)))) {
 		land_asap_a.active = 1;
 	} else {
 		land_asap_a.active = 0;
@@ -2321,19 +2322,20 @@ var messages_right_memo = func {
 		athr_off.active = 0;
 	}
 	
-	if ((phaseVarMemo3 >= 2 and phaseVarMemo3 <= 7) and getprop("/controls/flight/speedbrake") != 0) {
+	if ((phaseVarMemo3 >= 2 and phaseVarMemo3 <= 7) and pts.Controls.Flight.speedbrake.getValue() != 0) {
 		spd_brk.active = 1;
 	} else {
 		spd_brk.active = 0;
 	}
 	
-	if (getprop("/systems/thrust/state1") == "IDLE" and getprop("/systems/thrust/state2") == "IDLE" and phaseVarMemo3 >= 6 and phaseVarMemo3 <= 7) {
+	thrustState = [pts.Systems.Thrust.state[0].getValue(), pts.Systems.Thrust.state[1].getValue()];
+	if (thrustState[0] == "IDLE" and thrustState[1] == "IDLE" and phaseVarMemo3 >= 6 and phaseVarMemo3 <= 7) {
 		spd_brk.colour = "g";
-	} else if ((phaseVarMemo3 >= 2 and phaseVarMemo3 <= 5) or ((getprop("/systems/thrust/state1") != "IDLE" or getprop("/systems/thrust/state2") != "IDLE") and (phaseVarMemo3 >= 6 and phaseVarMemo3 <= 7))) {
+	} else if ((phaseVarMemo3 >= 2 and phaseVarMemo3 <= 5) or ((thrustState[0] != "IDLE" or thrustState[1]) != "IDLE") and (phaseVarMemo3 >= 6 and phaseVarMemo3 <= 7)) {
 		spd_brk.colour = "a";
 	}
 	
-	if (getprop("/controls/gear/brake-parking") == 1 and phaseVarMemo3 != 3) {
+	if (pts.Controls.Gear.parkingBrake.getValue() == 1 and phaseVarMemo3 != 3) {
 		park_brk.active = 1;
 	} else {
 		park_brk.active = 0;
@@ -2350,7 +2352,7 @@ var messages_right_memo = func {
 		brk_fan.active = 0;
 	}
 	
-	if (getprop("/controls/hydraulic/ptu") == 1 and ((getprop("/systems/hydraulic/yellow-psi") < 1450 and getprop("/systems/hydraulic/green-psi") > 1450 and getprop("/controls/hydraulic/elec-pump-yellow") == 0) or (getprop("/systems/hydraulic/yellow-psi") > 1450 and getprop("/systems/hydraulic/green-psi") < 1450))) {
+	if (systems.HYD.Switch.ptu.getValue() == 1 and ((systems.HYD.Psi.yellow.getValue() < 1450 and systems.HYD.Psi.green.getValue() > 1450 and getprop("/controls/hydraulic/elec-pump-yellow") == 0) or (systems.HYD.Psi.yellow.getValue() > 1450 and systems.HYD.Psi.green.getValue() < 1450))) {
 		ptu.active = 1;
 	} else {
 		ptu.active = 0;
@@ -2380,7 +2382,7 @@ var messages_right_memo = func {
 		nw_strg_disc.active = 0;
 	}
 	
-	if (getprop("/engines/engine[0]/state") == 3 or getprop("/engines/engine[1]/state") == 3) {
+	if (pts.Engines.Engine.state[0].getValue() == 3 or pts.Engines.Engine.state[1].getValue() == 3) {
 		nw_strg_disc.colour = "a";
 	} else {
 		nw_strg_disc.colour = "g";
@@ -2404,13 +2406,13 @@ var messages_right_memo = func {
 		company_call.active = 0;
 	}
 	
-	if (getprop("/controls/pneumatics/switches/apu") == 1 and getprop("/engines/engine[2]/n1") >= 95) {
+	if (getprop("/controls/pneumatics/switches/apu") == 1 and pts.APU.rpm.getValue() >= 95) {
 		apu_bleed.active = 1;
 	} else {
 		apu_bleed.active = 0;
 	}
 
-	if (apu_bleed.active == 0 and getprop("/engines/engine[2]/n1") >= 95) {
+	if (apu_bleed.active == 0 and pts.APU.rpm.getValue() >= 95) {
 		apu_avail.active = 1;
 	} else {
 		apu_avail.active = 0;
@@ -2458,7 +2460,7 @@ var messages_right_memo = func {
 		auto_brk_max.active = 0;
 	}
 	
-	if (getprop("/systems/fuel/valves/crossfeed-valve") != 0 and getprop("/controls/fuel/switches/crossfeed") == 1) {
+	if (systems.FUEL.Valves.crossfeed.getValue() != 0 and systems.FUEL.Switches.crossfeed.getValue()) {
 		fuelx.active = 1;
 	} else {
 		fuelx.active = 0;
diff --git a/Nasal/FMGC/FMGC.nas b/Nasal/FMGC/FMGC.nas
index b38c33df..2c028dd1 100644
--- a/Nasal/FMGC/FMGC.nas
+++ b/Nasal/FMGC/FMGC.nas
@@ -12,31 +12,18 @@ var code2 = 0;
 var gear0 = 0;
 var state1 = 0;
 var state2 = 0;
-var flaps = 0;
 var dep = "";
 var arr = "";
 var n1_left = 0;
 var n1_right = 0;
-var flaps = 0;
 var modelat = 0;
 var mode = 0;
-var modeI = 0;
 var gs = 0;
-var aglalt = 0;
 var cruiseft = 0;
 var cruiseft_b = 0;
-var newcruise = 0;
-var phase = 0;
 var state1 = 0;
 var state2 = 0;
-var wowl = 0;
-var wowr = 0;
-var targetalt = 0;
-var targetvs = 0;
-var targetfpa = 0;
 var accel_agl_ft = 0;
-var locarm = 0;
-var apprarm = 0;
 var fd1 = 0;
 var fd2 = 0;
 var spd = 0;
@@ -65,37 +52,17 @@ var nameadf1 = "XX";
 var ias = 0;
 var mach = 0;
 var ktsmach = 0;
-var mngktsmach = 0;
-var mng_spd = 0;
-var mng_spd_cmd = 0;
 var kts_sel = 0;
 var mach_sel = 0;
 var srsSPD = 0;
-var mach_switchover = 0;
 var decel = 0;
-var mng_alt_spd_cmd = 0;
 var mng_alt_spd = 0;
-var mng_alt_mach_cmd = 0;
 var mng_alt_mach = 0;
-var mng_spd_cmd = 0;
-var mng_spd = 0;
-var ap1 = 0;
-var ap2 = 0;
-var flx = 0;
-var lat = 0;
-var newlat = 0;
-var vert = 0;
-var newvert = 0;
-var newvertarm = 0;
-var thr1 = 0;
-var thr2 = 0;
 var altsel = 0;
 var crzFl = 0;
+var windHdg = 0;
+var windSpeed = 0;
 setprop("position/gear-agl-ft", 0);
-setprop("/FMGC/internal/mng-spd", 157);
-setprop("/FMGC/internal/mng-spd-cmd", 157);
-setprop("/FMGC/internal/mng-kts-mach", 0);
-setprop("/FMGC/internal/mach-switchover", 0);
 setprop("/it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway
 setprop("/it-autoflight/internal/vert-speed-fpm", 0);
 setprop("/it-autoflight/output/fma-pwr", 0);
@@ -116,10 +83,10 @@ var FMGCinit = func {
 	FMGCInternal.minspeed = 0;
 	FMGCInternal.maxspeed = 338;
 	FMGCInternal.phase = 0; # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done
-	setprop("/FMGC/internal/mng-spd", 157);
-	setprop("/FMGC/internal/mng-spd-cmd", 157);
-	setprop("/FMGC/internal/mng-kts-mach", 0);
-	setprop("/FMGC/internal/mach-switchover", 0);
+	FMGCInternal.mngSpd = 157;
+	FMGCInternal.mngSpdCmd = 157;
+	FMGCInternal.mngKtsMach = 0;
+	FMGCInternal.machSwitchover = 0;
 	setprop("/FMGC/internal/loc-source", "NAV0");
 	setprop("/FMGC/internal/optalt", 0);
 	setprop("/FMGC/internal/landing-time", -99);
@@ -259,6 +226,13 @@ var FMGCInternal = {
 	fob: 0,
 	fuelPredGw: 0,
 	cg: 0,
+	
+	
+	# Managed Speed
+	machSwitchover: 0,
+	mngKtsMach: 0,
+	mngSpd: 0,
+	mngSpdCmd: 0,
 };
 
 var postInit = func() {
@@ -271,10 +245,12 @@ var postInit = func() {
 var FMGCNodes = {
 	costIndex: props.globals.initNode("/FMGC/internal/cost-index", 0, "DOUBLE"),
 	flexSet: props.globals.initNode("/FMGC/internal/flex-set", 0, "BOOL"),
+	mngSpdAlt: props.globals.getNode("/FMGC/internal/mng-alt-spd"),
+	mngMachAlt: props.globals.getNode("/FMGC/internal/mng-alt-mach"),
 	toFromSet: props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL"),
+	toState: props.globals.initNode("/FMGC/internal/to-state", 0, "BOOL"),
 	v1: props.globals.initNode("/FMGC/internal/v1", 0, "DOUBLE"),
 	v1set: props.globals.initNode("/FMGC/internal/v1-set", 0, "BOOL"),
-	toState: props.globals.initNode("/FMGC/internal/to-state", 0, "BOOL"),
 };
 
 ############
@@ -621,69 +597,47 @@ var radios = maketimer(1, func() {
 var masterFMGC = maketimer(0.2, func {
 	n1_left = pts.Engines.Engine.n1Actual[0].getValue();
 	n1_right = pts.Engines.Engine.n1Actual[1].getValue();
-	flaps = getprop("/controls/flight/flaps-pos");
-	modelat = getprop("/modes/pfd/fma/roll-mode");
-	mode = getprop("/modes/pfd/fma/pitch-mode");
-	modeI = getprop("/it-autoflight/mode/vert");
-	gs = getprop("/velocities/groundspeed-kt");
-	alt = getprop("/instrumentation/altimeter/indicated-altitude-ft");
-	aglalt = pts.Position.gearAglFt.getValue();
+	modelat = Modes.PFD.FMA.rollMode.getValue();
+	mode = Modes.PFD.FMA.pitchMode.getValue();
+	gs = pts.Velocities.groundspeed.getValue();
+	alt = pts.Instrumentation.Altimeter.indicatedFt.getValue();
 	# cruiseft = FMGCInternal.crzFt;
 	# cruiseft_b = FMGCInternal.crzFt - 200;
-	newcruise = getprop("/it-autoflight/internal/alt");
-	phase = FMGCInternal.phase;
-	state1 = getprop("/systems/thrust/state1");
-	state2 = getprop("/systems/thrust/state2");
-	wowl = getprop("/gear/gear[1]/wow");
-	wowr = getprop("/gear/gear[2]/wow");
-	targetalt = getprop("/it-autoflight/internal/alt");
-	targetvs = getprop("/it-autoflight/input/vs");
-	targetfpa = getprop("/it-autoflight/input/fpa");
-	accel_agl_ft = getprop("/it-autoflight/settings/accel-agl-ft");
-	locarm = getprop("/it-autopilot/output/loc-armed");
-	apprarm = getprop("/it-autopilot/output/appr-armed");
+	state1 = pts.Systems.Thrust.state[0].getValue();
+	state2 = pts.Systems.Thrust.state[1].getValue();
+	accel_agl_ft = Setting.reducAglFt.getValue();
 	gear0 = pts.Gear.wow[0].getBoolValue();
-	ap1 = getprop("/it-autoflight/output/ap1");
-	ap2 = getprop("/it-autoflight/output/ap2");
-	flx = getprop("/systems/thrust/lim-flex");
-	lat = getprop("/it-autoflight/mode/lat");
-	newlat = getprop("/modes/pfd/fma/roll-mode");
-	vert = getprop("/it-autoflight/mode/vert");
-	newvert = getprop("/modes/pfd/fma/pitch-mode");
-	newvertarm = getprop("/modes/pfd/fma/pitch-mode2-armed");
-	thr1 = getprop("/controls/engines/engine[0]/throttle-pos");
-	thr2 = getprop("/controls/engines/engine[1]/throttle-pos");
-	altSel = getprop("/it-autoflight/input/alt");
+	altSel = Input.alt.getValue();
 	
 	if ((n1_left < 85 or n1_right < 85) and gs < 90 and mode == " " and gear0 and FMGCInternal.phase == 1) { # rejected takeoff
 		FMGCInternal.phase = 0;
-		setprop("/systems/pressurization/mode", "GN");
+		systems.PNEU.pressMode.setValue("GN");
 	}
 	
 	if (gear0 and FMGCInternal.phase == 0 and ((n1_left >= 85 and n1_right >= 85 and mode == "SRS") or gs >= 90)) {
 		FMGCInternal.phase = 1;
-		setprop("/systems/pressurization/mode", "TO");
+		systems.PNEU.pressMode.setValue("TO");
 	}
 	
 	if (FMGCInternal.phase == 1 and ((mode != "SRS" and mode != " ") or alt >= accel_agl_ft)) {
 		FMGCInternal.phase = 2;
-		setprop("/systems/pressurization/mode", "TO");
+		systems.PNEU.pressMode.setValue("TO");
 	}
 	
 	if (FMGCInternal.phase == 2 and (mode == "ALT CRZ" or mode == "ALT CRZ*")) {
 		FMGCInternal.phase = 3;
-		setprop("/systems/pressurization/mode", "CR");
+		systems.PNEU.pressMode.setValue("CR");
 	}
 	
 	if (FMGCInternal.crzFl >= 200) {
 		if (FMGCInternal.phase == 3 and (flightPlanController.arrivalDist <= 200 or altSel < 20000)) {
 			FMGCInternal.phase = 4;
-			setprop("/systems/pressurization/mode", "DE");
+			systems.PNEU.pressMode.setValue("DE");
 		}
 	} else {
 		if (FMGCInternal.phase == 3 and (flightPlanController.arrivalDist <= 200 or altSel < (FMGCInternal.crzFl * 100))) { # todo - not sure about crzFl condition, investigate what happens!
 			FMGCInternal.phase = 4;
-			setprop("/systems/pressurization/mode", "DE");
+			systems.PNEU.pressMode.setValue("DE");
 		}
 	}
 	
@@ -691,7 +645,7 @@ var masterFMGC = maketimer(0.2, func {
 		FMGCInternal.phase = 5;
 	}
 
-	if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and aglalt < 9500) { #todo decel pseudo waypoint
+	if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint
 		setprop("/FMGC/internal/decel", 1);
 	} else if (getprop("/FMGC/internal/decel") == 1 and (FMGCInternal.phase == 0 or FMGCInternal.phase == 6)) {
 		setprop("/FMGC/internal/decel", 0);
@@ -699,8 +653,8 @@ var masterFMGC = maketimer(0.2, func {
 	
 	if ((FMGCInternal.phase == 5) and state1 == "TOGA" and state2 == "TOGA") {
 		FMGCInternal.phase = 6;
-		setprop("/systems/pressurization/mode", "TO");
-		setprop("/it-autoflight/input/toga", 1);
+		systems.PNEU.pressMode.setValue("TO");
+		Input.toga.setValue(1);
 	}
 	
 	if (FMGCInternal.phase == 6 and alt >= accel_agl_ft) { # todo when insert altn or new dest
@@ -723,36 +677,38 @@ var masterFMGC = maketimer(0.2, func {
 	############################
 	# wind
 	############################
+	windHdg = pts.Environment.windFromHdg.getValue();
+	windSpeed = pts.Environment.windSpeedKt.getValue();
 	if (FMGCInternal.phase == 3 or FMGCInternal.phase == 4 or FMGCInternal.phase == 6) {
 		var windsDidChange = 0;
 		if (FMGCInternal.crzFt > 5000 and alt > 4980 and alt < 5020) {
-			if (sprintf("%03d", getprop("/environment/wind-from-heading-deg/")) != fmgc.windController.fl50_wind[0] or sprintf("%03d", getprop("/environment/wind-speed-kt/")) != fmgc.windController.fl50_wind[1]) {
-				fmgc.windController.fl50_wind[0] = sprintf("%03d", getprop("/environment/wind-from-heading-deg/"));
-				fmgc.windController.fl50_wind[1] = sprintf("%03d", getprop("/environment/wind-speed-kt/"));
+			if (sprintf("%03d", windHdg) != fmgc.windController.fl50_wind[0] or sprintf("%03d", windSpeed) != fmgc.windController.fl50_wind[1]) {
+				fmgc.windController.fl50_wind[0] = sprintf("%03d", windHdg);
+				fmgc.windController.fl50_wind[1] = sprintf("%03d", windSpeed);
 				fmgc.windController.fl50_wind[2] = "FL50";
 				windsDidChange = 1;
 			}
 		}
 		if (FMGCInternal.crzFt > 15000 and alt > 14980 and alt < 15020) {
-			if (sprintf("%03d", getprop("/environment/wind-from-heading-deg/")) != fmgc.windController.fl150_wind[0] or sprintf("%03d", getprop("/environment/wind-speed-kt/")) != fmgc.windController.fl150_wind[1]) {
-				fmgc.windController.fl150_wind[0] = sprintf("%03d", getprop("/environment/wind-from-heading-deg/"));
-				fmgc.windController.fl150_wind[1] = sprintf("%03d", getprop("/environment/wind-speed-kt/"));
+			if (sprintf("%03d", windHdg) != fmgc.windController.fl150_wind[0] or sprintf("%03d", windSpeed) != fmgc.windController.fl150_wind[1]) {
+				fmgc.windController.fl150_wind[0] = sprintf("%03d", windHdg);
+				fmgc.windController.fl150_wind[1] = sprintf("%03d", windSpeed);
 				fmgc.windController.fl150_wind[2] = "FL150";
 				windsDidChange = 1;
 			}
 		}
 		if (FMGCInternal.crzFt > 25000 and alt > 24980 and alt < 25020) {
-			if (sprintf("%03d", getprop("/environment/wind-from-heading-deg/")) != fmgc.windController.fl250_wind[0] or sprintf("%03d", getprop("/environment/wind-speed-kt/")) != fmgc.windController.fl250_wind[1]) {
-				fmgc.windController.fl250_wind[0] = sprintf("%03d", getprop("/environment/wind-from-heading-deg/"));
-				fmgc.windController.fl250_wind[1] = sprintf("%03d", getprop("/environment/wind-speed-kt/"));
+			if (sprintf("%03d", windHdg) != fmgc.windController.fl250_wind[0] or sprintf("%03d", windSpeed) != fmgc.windController.fl250_wind[1]) {
+				fmgc.windController.fl250_wind[0] = sprintf("%03d", windHdg);
+				fmgc.windController.fl250_wind[1] = sprintf("%03d", windSpeed);
 				fmgc.windController.fl250_wind[2] = "FL250";
 				windsDidChange = 1;
 			}
 		}
 		if (FMGCInternal.crzSet and alt > FMGCInternal.crzFt - 20 and alt < FMGCInternal.crzFt + 20) {
-			if (sprintf("%03d", getprop("/environment/wind-from-heading-deg/")) != fmgc.windController.flcrz_wind[0] or sprintf("%03d", getprop("/environment/wind-speed-kt/")) != fmgc.windController.flcrz_wind[1]) {
-				fmgc.windController.flcrz_wind[0] = sprintf("%03d", getprop("/environment/wind-from-heading-deg/"));
-				fmgc.windController.flcrz_wind[1] = sprintf("%03d", getprop("/environment/wind-speed-kt/"));
+			if (sprintf("%03d", windHdg) != fmgc.windController.flcrz_wind[0] or sprintf("%03d", windSpeed) != fmgc.windController.flcrz_wind[1]) {
+				fmgc.windController.flcrz_wind[0] = sprintf("%03d", windHdg);
+				fmgc.windController.flcrz_wind[1] = sprintf("%03d", windSpeed);
 				fmgc.windController.flcrz_wind[2] = "FL" ~ FMGCInternal.crzFl;
 				windsDidChange = 1;
 			}
@@ -765,9 +721,9 @@ var masterFMGC = maketimer(0.2, func {
 	############################
 	# calculate speeds
 	############################
-	flap = getprop("/controls/flight/flaps-pos");
+	flap = pts.Controls.Flight.flapsPos.getValue();
 	weight_lbs = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() / 1000;
-	altitude = getprop("/instrumentation/altimeter/indicated-altitude-ft");
+	altitude = pts.Instrumentation.Altimeter.indicatedFt.getValue();
 	
 	# current speeds
 	FMGCInternal.clean = 2 * weight_lbs * 0.45359237 + 85;
@@ -932,7 +888,11 @@ var masterFMGC = maketimer(0.2, func {
 		}
 	} else if (flap == 5) { # FULL
 		FMGCInternal.vsw = FMGCInternal.vs1g_conf_full;
-		FMGCInternal.minspeed = FMGCInternal.vapp;
+		if (FMGCInternal.vappSpeedSet) {
+			FMGCInternal.minspeed = FMGCInternal.vapp_appr;
+		} else {
+			FMGCInternal.minspeed = FMGCInternal.vapp;
+		}
 		
 		if (FMGCInternal.takeoffState) {
 			FMGCInternal.vls_min = FMGCInternal.vs1g_clean * 1.13;
@@ -941,7 +901,7 @@ var masterFMGC = maketimer(0.2, func {
 		}
 	}
 	
-	if (gear0 and flaps < 5 and (state1 == "MCT" or state1 == "MAN THR" or state1 == "TOGA") and (state2 == "MCT" or state2 == "MAN THR" or state2 == "TOGA")) {
+	if (gear0 and pts.Controls.Flight.flapsPos.getValue() < 5 and (state1 == "MCT" or state1 == "MAN THR" or state1 == "TOGA") and (state2 == "MCT" or state2 == "MAN THR" or state2 == "TOGA")) {
 		if (!FMGCInternal.takeoffState) {
 			fmgc.FMGCNodes.toState.setValue(1);
 		}
@@ -959,7 +919,7 @@ var masterFMGC = maketimer(0.2, func {
 	
 	departure_rwy = fmgc.flightPlanController.flightplans[2].departure_runway;
 	destination_rwy = fmgc.flightPlanController.flightplans[2].destination_runway;
-	if (destination_rwy != nil and phase >= 2) {
+	if (destination_rwy != nil and FMGCInternal.phase >= 2) {
 		var airport = airportinfo(FMGCInternal.arrApt);
 		setprop("/FMGC/internal/ldg-elev", airport.elevation * M2FT); # eventually should be runway elevation
 		magnetic_hdg = geo.normdeg(destination_rwy.heading - getprop("/environment/magnetic-variation-deg"));
@@ -974,7 +934,7 @@ var masterFMGC = maketimer(0.2, func {
 		} else if (!getprop("/FMGC/internal/ils1crs-set")) {
 			setprop("instrumentation/nav[0]/radials/selected-deg", magnetic_hdg);
 		}
-	} else if (departure_rwy != nil and phase <= 1) {
+	} else if (departure_rwy != nil and FMGCInternal.phase <= 1) {
 		magnetic_hdg = geo.normdeg(departure_rwy.heading - getprop("/environment/magnetic-variation-deg"));
 		runway_ils = departure_rwy.ils_frequency_mhz;
 		if (runway_ils != nil and !getprop("/FMGC/internal/ils1freq-set") and !getprop("/FMGC/internal/ils1crs-set")) {
@@ -992,25 +952,28 @@ var masterFMGC = maketimer(0.2, func {
 
 var reset_FMGC = func {
 	FMGCInternal.phase = 0;
-	fd1 = getprop("/it-autoflight/input/fd1");
-	fd2 = getprop("/it-autoflight/input/fd2");
-	spd = getprop("/it-autoflight/input/kts");
-	hdg = getprop("/it-autoflight/input/hdg");
-	alt = getprop("/it-autoflight/input/alt");
+	fd1 = Input.fd1.getValue();
+	fd2 = Input.fd2.getValue();
+	spd = Input.kts.getValue();
+	hdg = Input.hdg.getValue();
+	alt = Input.alt.getValue();
+	
 	ITAF.init();
 	FMGCinit();
 	flightPlanController.reset();
 	windController.reset();
 	windController.init();
-	
 	mcdu.MCDU_reset(0);
 	mcdu.MCDU_reset(1);
-	setprop("it-autoflight/input/fd1", fd1);
-	setprop("it-autoflight/input/fd2", fd2);
-	setprop("it-autoflight/input/kts", spd);
-	setprop("it-autoflight/input/hdg", hdg);
-	setprop("it-autoflight/input/alt", alt);
-	setprop("/systems/pressurization/mode", "GN");
+	mcdu.ReceivedMessagesDatabase.clearDatabase();
+	
+	Input.fd1.setValue(fd1);
+	Input.fd2.setValue(fd2);
+	Input.kts.setValue(spd);
+	Input.hdg.setValue(hdg);
+	Input.alt.setValue(alt);
+	
+	systems.PNEU.pressMode.setValue("GN");
 	setprop("/systems/pressurization/vs", "0");
 	setprop("/systems/pressurization/targetvs", "0");
 	setprop("/systems/pressurization/vs-norm", "0");
@@ -1019,7 +982,7 @@ var reset_FMGC = func {
 	setprop("/systems/pressurization/outflowpos", "0");
 	setprop("/systems/pressurization/deltap-norm", "0");
 	setprop("/systems/pressurization/outflowpos-norm", "0");
-	altitude = getprop("/instrumentation/altimeter/indicated-altitude-ft");
+	altitude = pts.Instrumentation.Altimeter.indicatedFt.getValue();
 	setprop("/systems/pressurization/cabinalt", altitude);
 	setprop("/systems/pressurization/targetalt", altitude); 
 	setprop("/systems/pressurization/diff-to-target", "0");
@@ -1028,7 +991,6 @@ var reset_FMGC = func {
 	setprop("/systems/pressurization/ambientpsi", "0");
 	setprop("/systems/pressurization/cabinpsi", "0");
 	
-	mcdu.ReceivedMessagesDatabase.clearDatabase();
 }
 
 #################
@@ -1037,121 +999,110 @@ var reset_FMGC = func {
 
 var ManagedSPD = maketimer(0.25, func {
 	if (FMGCInternal.crzSet and FMGCInternal.costIndexSet) {
-		if (getprop("/it-autoflight/input/spd-managed") == 1) {
-			altitude = getprop("/instrumentation/altimeter/indicated-altitude-ft");
-			mode = getprop("/modes/pfd/fma/pitch-mode");
-			ias = getprop("/instrumentation/airspeed-indicator/indicated-speed-kt");
-			mach = getprop("/instrumentation/airspeed-indicator/indicated-mach");
-			ktsmach = getprop("/it-autoflight/input/kts-mach");
-			mngktsmach = getprop("/FMGC/internal/mng-kts-mach");
-			mng_spd = getprop("/FMGC/internal/mng-spd");
-			mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd");
-			kts_sel = getprop("/it-autoflight/input/kts");
-			mach_sel = getprop("/it-autoflight/input/mach");
+		if (Custom.Input.spdManaged.getBoolValue()) {
+			altitude = pts.Instrumentation.Altimeter.indicatedFt.getValue();
+			mode = Modes.PFD.FMA.pitchMode.getValue();
+			ias = pts.Instrumentation.AirspeedIndicator.indicatedSpdKt.getValue();
+			mach = pts.Instrumentation.AirspeedIndicator.indicatedMach.getValue();
+			ktsmach = Input.ktsMach.getValue();
+			kts_sel = Input.kts.getValue();
+			mach_sel = Input.mach.getValue();
 			srsSPD = getprop("/it-autoflight/settings/togaspd");
 			phase = FMGCInternal.phase; # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done
-			flap = getprop("/controls/flight/flaps-pos");
-			mach_switchover = getprop("/FMGC/internal/mach-switchover");
+			flap = pts.Controls.Flight.flapsPos.getValue();
 			decel = getprop("/FMGC/internal/decel");
 			
-			mng_alt_spd_cmd = getprop("/FMGC/internal/mng-alt-spd");
-			mng_alt_spd = math.round(mng_alt_spd_cmd, 1);
-			
-			mng_alt_mach_cmd = getprop("/FMGC/internal/mng-alt-mach");
-			mng_alt_mach = math.round(mng_alt_mach_cmd, 0.001);
+			mng_alt_spd = math.round(FMGCNodes.mngSpdAlt.getValue(), 1);
+			mng_alt_mach = math.round(FMGCNodes.mngMachAlt.getValue(), 0.001);
 			
 			if (mach > mng_alt_mach and (FMGCInternal.phase == 2 or FMGCInternal.phase == 3)) {
-				setprop("/FMGC/internal/mach-switchover", 1);
+				FMGCInternal.machSwitchover = 1;
 			}
 			
 			if (ias > mng_alt_spd and (FMGCInternal.phase == 4 or FMGCInternal.phase == 5)) {
-				setprop("/FMGC/internal/mach-switchover", 0);
+				FMGCInternal.machSwitchover = 0;
 			}
 			
 			if ((mode == " " or mode == "SRS") and (FMGCInternal.phase == 0 or FMGCInternal.phase == 1)) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != srsSPD) {
-					setprop("/FMGC/internal/mng-spd-cmd", srsSPD);
+				if (FMGCInternal.mngSpdCmd != srsSPD) {
+					FMGCInternal.mngSpdCmd = srsSPD;
 				}
 			} else if ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude <= 10050) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != 250 and !decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", 250);
-				} else if (mng_spd_cmd != FMGCInternal.minspeed and decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", FMGCInternal.minspeed);
+				if (FMGCInternal.mngSpdCmd != 250 and !decel) {
+					FMGCInternal.mngSpdCmd = 250;
+				} else if (FMGCInternal.mngSpdCmd != FMGCInternal.minspeed and decel) {
+					FMGCInternal.mngSpdCmd = FMGCInternal.minspeed;
 				}
-			} else if ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude > 10070 and !mach_switchover) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+			} else if ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude > 10070 and !FMGCInternal.machSwitchover) {
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != mng_alt_spd) {
-					setprop("/FMGC/internal/mng-spd-cmd", mng_alt_spd);
+				if (FMGCInternal.mngSpdCmd != mng_alt_spd) {
+					FMGCInternal.mngSpdCmd = mng_alt_spd;
 				}
-			} else if ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude > 10070 and mach_switchover) {
-				if (!mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 1);
+			} else if ((FMGCInternal.phase == 2 or FMGCInternal.phase == 3) and altitude > 10070 and FMGCInternal.machSwitchover) {
+				if (!FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 1;
 				}
-				if (mng_spd_cmd != mng_alt_mach) {
-					setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach);
+				if (FMGCInternal.mngSpdCmd != mng_alt_mach) {
+					FMGCInternal.mngSpdCmd = mng_alt_mach;
 				}
-			} else if (FMGCInternal.phase == 4 and altitude > 11000 and !mach_switchover) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+			} else if (FMGCInternal.phase == 4 and altitude > 11000 and !FMGCInternal.machSwitchover) {
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != mng_alt_spd) {
-					setprop("/FMGC/internal/mng-spd-cmd", mng_alt_spd);
+				if (FMGCInternal.mngSpdCmd != mng_alt_spd) {
+					FMGCInternal.mngSpdCmd = mng_alt_spd;
 				}
-			} else if (FMGCInternal.phase == 4 and altitude > 11000 and mach_switchover) {
-				if (!mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 1);
+			} else if (FMGCInternal.phase == 4 and altitude > 11000 and FMGCInternal.machSwitchover) {
+				if (!FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 1;
 				}
-				if (mng_spd_cmd != mng_alt_mach) {
-					setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach);
+				if (FMGCInternal.mngSpdCmd != mng_alt_mach) {
+					FMGCInternal.mngSpdCmd = mng_alt_mach;
 				}
-			} else if ((FMGCInternal.phase == 4 or FMGCInternal.phase == 5 or FMGCInternal.phase == 6) and altitude > 11000 and !mach_switchover) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+			} else if ((FMGCInternal.phase == 4 or FMGCInternal.phase == 5 or FMGCInternal.phase == 6) and altitude > 11000 and !FMGCInternal.machSwitchover) {
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != mng_alt_spd and !decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", mng_alt_spd);
-				} else if (mng_spd_cmd != FMGCInternal.minspeed and decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", FMGCInternal.minspeed);
+				if (FMGCInternal.mngSpdCmd != mng_alt_spd and !decel) {
+					FMGCInternal.mngSpdCmd = mng_alt_spd;
+				} else if (FMGCInternal.mngSpdCmd != FMGCInternal.minspeed and decel) {
+					FMGCInternal.mngSpdCmd = FMGCInternal.minspeed;
 				}
 			} else if ((FMGCInternal.phase == 4 or FMGCInternal.phase == 5 or FMGCInternal.phase == 6) and altitude <= 10980) {
-				if (mngktsmach) {
-					setprop("/FMGC/internal/mng-kts-mach", 0);
+				if (FMGCInternal.mngKtsMach) {
+					FMGCInternal.mngKtsMach = 0;
 				}
-				if (mng_spd_cmd != 250 and !decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", 250);
-				} else if (mng_spd_cmd != FMGCInternal.minspeed and decel) {
-					setprop("/FMGC/internal/mng-spd-cmd", FMGCInternal.minspeed);
+				if (FMGCInternal.mngSpdCmd != 250 and !decel) {
+					FMGCInternal.mngSpdCmd = 250;
+				} else if (FMGCInternal.mngSpdCmd != FMGCInternal.minspeed and decel) {
+					FMGCInternal.mngSpdCmd = FMGCInternal.minspeed;
 				}
 			}
 			
-			mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd");
-			
-			if (mng_spd_cmd > FMGCInternal.maxspeed - 5) {
-				setprop("/FMGC/internal/mng-spd", FMGCInternal.maxspeed - 5);
+			if (FMGCInternal.mngSpdCmd > FMGCInternal.maxspeed - 5) {
+				FMGCInternal.mngSpd = (FMGCInternal.maxspeed - 5);
 			} else {
-				setprop("/FMGC/internal/mng-spd", mng_spd_cmd);
+				FMGCInternal.mngSpd = FMGCInternal.mngSpdCmd;
 			}
 			
-			if (ktsmach and !mngktsmach) {
-				setprop("/it-autoflight/input/kts-mach", 0);
-			} else if (!ktsmach and mngktsmach) {
-				setprop("/it-autoflight/input/kts-mach", 1);
+			if (ktsmach and !FMGCInternal.mngKtsMach) {
+				Input.ktsMach.setValue(0);
+			} else if (!ktsmach and FMGCInternal.mngKtsMach) {
+				Input.ktsMach.setValue(1);
 			}
 			
-			mng_spd = getprop("/FMGC/internal/mng-spd");
-			
-			if (kts_sel != mng_spd and !ktsmach) {
-				setprop("/it-autoflight/input/kts", mng_spd);
-			} else if (mach_sel != mng_spd and ktsmach) {
-				setprop("/it-autoflight/input/mach", mng_spd);
+			if (kts_sel != FMGCInternal.mngSpd and !ktsmach) {
+				Input.kts.setValue(FMGCInternal.mngSpd);
+			} else if (mach_sel != FMGCInternal.mngSpd and ktsmach) {
+				Input.mach.setValue(FMGCInternal.mngSpd);
 			}
 		} else {
 			ManagedSPD.stop();
diff --git a/Nasal/Libraries/property-tree-setup.nas b/Nasal/Libraries/property-tree-setup.nas
index 3ab75c8d..f35ebb56 100644
--- a/Nasal/Libraries/property-tree-setup.nas
+++ b/Nasal/Libraries/property-tree-setup.nas
@@ -76,6 +76,8 @@ var Engines = {
 var Environment = {
 	magVar: props.globals.getNode("/environment/magnetic-variation-deg"),
 	tempDegC: props.globals.getNode("/environment/temperature-degc"),
+	windFromHdg: props.globals.getNode("/environment/wind-from-heading-deg"),
+	windSpeedKt: props.globals.getNode("/environment/wind-speed-kt"),
 };
 
 var Fdm = {
diff --git a/Nasal/Systems/FADEC/engines-cfm.nas b/Nasal/Systems/FADEC/engines-cfm.nas
index 83a13e1f..ec450cde 100644
--- a/Nasal/Systems/FADEC/engines-cfm.nas
+++ b/Nasal/Systems/FADEC/engines-cfm.nas
@@ -80,7 +80,7 @@ var start_one_mancheck = func {
 			settimer(start_one_mancheck_b, 0.5);
 		}
 	} else {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
 			setprop("/engines/engine[0]/state", 0);
 			setprop("/controls/engines/engine[0]/starter", 0);
@@ -163,7 +163,7 @@ var start_two_mancheck = func {
 			settimer(start_two_mancheck_b, 0.5);
 		}
 	} else {
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
 			setprop("/engines/engine[1]/state", 0);
 			setprop("/controls/engines/engine[1]/starter", 0);
@@ -319,23 +319,23 @@ var eng_two_n2_check = maketimer(0.5, func {
 
 # Various Other Stuff
 setlistener("/controls/engines/engine-start-switch", func {
-	if (getprop("/engines/engine[0]/state") == 0) {
+	if (pts.Engines.Engine.state[0].getValue() == 0) {
 		start_one_check();
 		start_one_mancheck();
 	}
-	if (getprop("/engines/engine[1]/state") == 0) {
+	if (pts.Engines.Engine.state[1].getValue() == 0) {
 		start_two_check();
 		start_two_mancheck();
 	}
 	if ((getprop("/controls/engines/engine-start-switch") == 0) or (getprop("/controls/engines/engine-start-switch") == 1)) {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/controls/engines/engine[0]/starter", 0);
 			setprop("/controls/engines/engine[0]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
 			setprop("/engines/engine[0]/state", 0);
 			interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time);
 		}
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/controls/engines/engine[1]/starter", 0);
 			setprop("/controls/engines/engine[1]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
@@ -347,7 +347,7 @@ setlistener("/controls/engines/engine-start-switch", func {
 
 setlistener("/systems/pneumatics/psi/engine-1-psi", func {
 	if (systems.PNEU.Psi.engine1.getValue() < 24.5) {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/controls/engines/engine[0]/starter", 0);
 			setprop("/controls/engines/engine[0]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
@@ -359,7 +359,7 @@ setlistener("/systems/pneumatics/psi/engine-1-psi", func {
 
 setlistener("/systems/pneumatics/psi/engine-2-psi", func {
 	if (systems.PNEU.Psi.engine2.getValue() < 24.5) {
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/controls/engines/engine[1]/starter", 0);
 			setprop("/controls/engines/engine[1]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
@@ -370,10 +370,10 @@ setlistener("/systems/pneumatics/psi/engine-2-psi", func {
 }, 0, 0);
 
 setlistener("/engines/engine[0]/state", func() {
-	setprop("/sim/sound/shutdown[0]", getprop("/engines/engine[0]/state"));
+	setprop("/sim/sound/shutdown[0]", pts.Engines.Engine.state[0].getValue());
 }, 0, 0);
 
 
 setlistener("/engines/engine[1]/state", func() {
-	setprop("/sim/sound/shutdown[1]", getprop("/engines/engine[1]/state"));
+	setprop("/sim/sound/shutdown[1]", pts.Engines.Engine.state[1].getValue());
 }, 0, 0);
\ No newline at end of file
diff --git a/Nasal/Systems/FADEC/engines-iae.nas b/Nasal/Systems/FADEC/engines-iae.nas
index 09716355..27a74738 100644
--- a/Nasal/Systems/FADEC/engines-iae.nas
+++ b/Nasal/Systems/FADEC/engines-iae.nas
@@ -80,7 +80,7 @@ var start_one_mancheck = func {
 			settimer(start_one_mancheck_b, 0.5);
 		}
 	} else {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
 			setprop("/engines/engine[0]/state", 0);
 			setprop("/controls/engines/engine[0]/starter", 0);
@@ -163,7 +163,7 @@ var start_two_mancheck = func {
 			settimer(start_two_mancheck_b, 0.5);
 		}
 	} else {
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
 			setprop("/engines/engine[1]/state", 0);
 			setprop("/controls/engines/engine[1]/starter", 0);
@@ -319,23 +319,23 @@ var eng_two_n2_check = maketimer(0.5, func {
 
 # Various Other Stuff
 setlistener("/controls/engines/engine-start-switch", func {
-	if (getprop("/engines/engine[0]/state") == 0) {
+	if (pts.Engines.Engine.state[0].getValue() == 0) {
 		start_one_check();
 		start_one_mancheck();
 	}
-	if (getprop("/engines/engine[1]/state") == 0) {
+	if (pts.Engines.Engine.state[1].getValue() == 0) {
 		start_two_check();
 		start_two_mancheck();
 	}
 	if ((getprop("/controls/engines/engine-start-switch") == 0) or (getprop("/controls/engines/engine-start-switch") == 1)) {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/controls/engines/engine[0]/starter", 0);
 			setprop("/controls/engines/engine[0]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
 			setprop("/engines/engine[0]/state", 0);
 			interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time);
 		}
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/controls/engines/engine[1]/starter", 0);
 			setprop("/controls/engines/engine[1]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
@@ -347,7 +347,7 @@ setlistener("/controls/engines/engine-start-switch", func {
 
 setlistener("/systems/pneumatics/psi/engine-1-psi", func {
 	if (systems.PNEU.Psi.engine1.getValue() < 24.5) {
-		if (getprop("/engines/engine[0]/state") == 1 or getprop("/engines/engine[0]/state") == 2) {
+		if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) {
 			setprop("/controls/engines/engine[0]/starter", 0);
 			setprop("/controls/engines/engine[0]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-1", 0);
@@ -359,7 +359,7 @@ setlistener("/systems/pneumatics/psi/engine-1-psi", func {
 
 setlistener("/systems/pneumatics/psi/engine-2-psi", func {
 	if (systems.PNEU.Psi.engine2.getValue() < 24.5) {
-		if (getprop("/engines/engine[1]/state") == 1 or getprop("/engines/engine[1]/state") == 2) {
+		if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) {
 			setprop("/controls/engines/engine[1]/starter", 0);
 			setprop("/controls/engines/engine[1]/cutoff", 1);
 			setprop("/systems/pneumatics/valves/starter-valve-2", 0);
@@ -370,10 +370,10 @@ setlistener("/systems/pneumatics/psi/engine-2-psi", func {
 }, 0, 0);
 
 setlistener("/engines/engine[0]/state", func() {
-	setprop("/sim/sound/shutdown[0]", getprop("/engines/engine[0]/state"));
+	setprop("/sim/sound/shutdown[0]", pts.Engines.Engine.state[0].getValue());
 }, 0, 0);
 
 
 setlistener("/engines/engine[1]/state", func() {
-	setprop("/sim/sound/shutdown[1]", getprop("/engines/engine[1]/state"));
+	setprop("/sim/sound/shutdown[1]", pts.Engines.Engine.state[1].getValue());
 }, 0, 0);
\ No newline at end of file
diff --git a/Nasal/Systems/pneumatics.nas b/Nasal/Systems/pneumatics.nas
index 6ba11a8d..d6f23d57 100644
--- a/Nasal/Systems/pneumatics.nas
+++ b/Nasal/Systems/pneumatics.nas
@@ -98,6 +98,7 @@ var PNEU = {
 		ramAir: props.globals.getNode("/systems/air-conditioning/valves/ram-air"),
 		hotAir: props.globals.getNode("/systems/air-conditioning/valves/hot-air"),
 	},
+	pressMode: props.globals.getNode("/systems/pressurization/mode", 1),
 	init: func() {
 		me.resetFail();
 		
@@ -165,8 +166,8 @@ var PNEU = {
 		targetalt = getprop("/systems/pressurization/targetalt");
 		ambient = getprop("/systems/pressurization/ambientpsi");
 		cabinpsi = getprop("/systems/pressurization/cabinpsi");
-		state1 = getprop("/systems/thrust/state1");
-		state2 = getprop("/systems/thrust/state2");
+		state1 = pts.Systems.Thrust.state[0].getValue();
+		state2 = pts.Systems.Thrust.state[1].getValue();
 		pressmode = getprop("/systems/pressurization/mode");
 		vs = getprop("/systems/pressurization/vs-norm");
 		manvs = getprop("/systems/pressurization/manvs-cmd");
diff --git a/Systems/upper-ecam.xml b/Systems/upper-ecam.xml
index d34e4020..298e86b8 100644
--- a/Systems/upper-ecam.xml
+++ b/Systems/upper-ecam.xml
@@ -400,4 +400,256 @@
 		<output>/ECAM/Upper/N1ylim</output>
 	</filter>
 	
+	<filter>
+		<name>Flap Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>35</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-192</dep></entry>
+					<entry><ind>10.0</ind><dep>-135</dep></entry>
+					<entry><ind>15.0</ind><dep>-89</dep></entry>
+					<entry><ind>20.0</ind><dep>-43</dep></entry>
+					<entry><ind>35.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>40</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-192</dep></entry>
+					<entry><ind>10.0</ind><dep>-135</dep></entry>
+					<entry><ind>15.0</ind><dep>-89</dep></entry>
+					<entry><ind>20.0</ind><dep>-43</dep></entry>
+					<entry><ind>40.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/FlapX</output>
+	</filter>
+	
+	<filter>
+		<name>Flap Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>35</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-47</dep></entry>
+					<entry><ind>10.0</ind><dep>-33</dep></entry>
+					<entry><ind>15.0</ind><dep>-21</dep></entry>
+					<entry><ind>20.0</ind><dep>-10</dep></entry>
+					<entry><ind>35.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>40</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-47</dep></entry>
+					<entry><ind>10.0</ind><dep>-33</dep></entry>
+					<entry><ind>15.0</ind><dep>-21</dep></entry>
+					<entry><ind>20.0</ind><dep>-10</dep></entry>
+					<entry><ind>40.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/FlapY</output>
+	</filter>
+	
+	<filter>
+		<name>Flap Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>35</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-200</dep></entry>
+					<entry><ind>10.0</ind><dep>-135</dep></entry>
+					<entry><ind>15.0</ind><dep>-95</dep></entry>
+					<entry><ind>20.0</ind><dep>-48.5</dep></entry>
+					<entry><ind>35.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>40</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-200</dep></entry>
+					<entry><ind>10.0</ind><dep>-135</dep></entry>
+					<entry><ind>15.0</ind><dep>-95</dep></entry>
+					<entry><ind>20.0</ind><dep>-48.5</dep></entry>
+					<entry><ind>40.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/FlapXtrans</output>
+	</filter>
+	
+	<filter>
+		<name>Flap Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>35</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-49</dep></entry>
+					<entry><ind>10.0</ind><dep>-33</dep></entry>
+					<entry><ind>15.0</ind><dep>-23</dep></entry>
+					<entry><ind>20.0</ind><dep>-11.25</dep></entry>
+					<entry><ind>35.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>
+			<condition>
+				<equals>
+					<property>options/maxflap</property>
+					<value>40</value>
+				</equals>
+			</condition>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/flap-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-49</dep></entry>
+					<entry><ind>10.0</ind><dep>-33</dep></entry>
+					<entry><ind>15.0</ind><dep>-23</dep></entry>
+					<entry><ind>20.0</ind><dep>-11.25</dep></entry>
+					<entry><ind>40.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/FlapYtrans</output>
+	</filter>
+	
+	<filter>
+		<name>Slat Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/slat-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>131</dep></entry>
+					<entry><ind>18.0</ind><dep>92</dep></entry>
+					<entry><ind>22.0</ind><dep>46</dep></entry>
+					<entry><ind>27.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/SlatX</output>
+	</filter>
+	
+	<filter>
+		<name>Slat Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/slat-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-42</dep></entry>
+					<entry><ind>18.0</ind><dep>-28</dep></entry>
+					<entry><ind>22.0</ind><dep>-14</dep></entry>
+					<entry><ind>27.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/SlatY</output>
+	</filter>
+	
+	<filter>
+		<name>Slat Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/slat-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>135</dep></entry>
+					<entry><ind>18.0</ind><dep>95</dep></entry>
+					<entry><ind>22.0</ind><dep>50</dep></entry>
+					<entry><ind>27.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/SlatXtrans</output>
+	</filter>
+	
+	<filter>
+		<name>Slat Indicator</name>
+		<type>gain</type>
+		<gain>1.0</gain>
+		<input>
+			<expression>
+				<table>
+					<property>/fdm/jsbsim/fcs/slat-pos-deg</property>
+					<entry><ind> 0.0</ind><dep>-43</dep></entry>
+					<entry><ind>18.0</ind><dep>-29</dep></entry>
+					<entry><ind>22.0</ind><dep>-15</dep></entry>
+					<entry><ind>27.0</ind><dep>0</dep></entry>
+				</table>
+			</expression>
+		</input>
+		<input>0</input>
+		<output>/ECAM/Upper/SlatYtrans</output>
+	</filter>
+	
 </PropertyList>