diff --git a/Aircraft/Instruments-3d/kln94/auxPages.nas b/Aircraft/Instruments-3d/kln94/auxPages.nas
new file mode 100644
index 000000000..e69de29bb
diff --git a/Aircraft/Instruments-3d/kln94/cdi.svg b/Aircraft/Instruments-3d/kln94/cdi.svg
new file mode 100644
index 000000000..6344701fa
--- /dev/null
+++ b/Aircraft/Instruments-3d/kln94/cdi.svg
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="New document 1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="447.91003"
+     inkscape:cy="1152.5914"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1574"
+     inkscape:window-height="1278"
+     inkscape:window-x="131"
+     inkscape:window-y="26"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="cdi"
+       transform="translate(-18,-64)">
+      <rect
+         y="63.826897"
+         x="18.384771"
+         height="112.42998"
+         width="494.26764"
+         id="background"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <g
+         style="fill:#ffffff"
+         transform="translate(-75.698485,-187.25102)"
+         id="g3776">
+        <path
+           sodipodi:type="star"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           id="path2987"
+           sodipodi:sides="4"
+           sodipodi:cx="132"
+           sodipodi:cy="303.36218"
+           sodipodi:r1="11"
+           sodipodi:r2="7.7781744"
+           sodipodi:arg1="0"
+           sodipodi:arg2="0.78539816"
+           inkscape:flatsided="true"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           transform="translate(49,-23.999995)" />
+        <path
+           transform="translate(84.25,-23.999995)"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="true"
+           sodipodi:arg2="0.78539816"
+           sodipodi:arg1="0"
+           sodipodi:r2="7.7781744"
+           sodipodi:r1="11"
+           sodipodi:cy="303.36218"
+           sodipodi:cx="132"
+           sodipodi:sides="4"
+           id="path3768"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           id="path3770"
+           sodipodi:sides="4"
+           sodipodi:cx="132"
+           sodipodi:cy="303.36218"
+           sodipodi:r1="11"
+           sodipodi:r2="7.7781744"
+           sodipodi:arg1="0"
+           sodipodi:arg2="0.78539816"
+           inkscape:flatsided="true"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           transform="translate(119.5,-23.999995)" />
+        <path
+           transform="translate(154.75,-23.999995)"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="true"
+           sodipodi:arg2="0.78539816"
+           sodipodi:arg1="0"
+           sodipodi:r2="7.7781744"
+           sodipodi:r1="11"
+           sodipodi:cy="303.36218"
+           sodipodi:cx="132"
+           sodipodi:sides="4"
+           id="path3772"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           id="path3774"
+           sodipodi:sides="4"
+           sodipodi:cx="132"
+           sodipodi:cy="303.36218"
+           sodipodi:r1="11"
+           sodipodi:r2="7.7781744"
+           sodipodi:arg1="0"
+           sodipodi:arg2="0.78539816"
+           inkscape:flatsided="true"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           transform="translate(190,-23.999995)" />
+      </g>
+      <g
+         style="fill:#ffffff"
+         id="g3783"
+         transform="translate(135.01934,-187.25102)">
+        <path
+           transform="translate(49,-23.999995)"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="true"
+           sodipodi:arg2="0.78539816"
+           sodipodi:arg1="0"
+           sodipodi:r2="7.7781744"
+           sodipodi:r1="11"
+           sodipodi:cy="303.36218"
+           sodipodi:cx="132"
+           sodipodi:sides="4"
+           id="path3785"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           id="path3787"
+           sodipodi:sides="4"
+           sodipodi:cx="132"
+           sodipodi:cy="303.36218"
+           sodipodi:r1="11"
+           sodipodi:r2="7.7781744"
+           sodipodi:arg1="0"
+           sodipodi:arg2="0.78539816"
+           inkscape:flatsided="true"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           transform="translate(84.25,-23.999995)" />
+        <path
+           transform="translate(119.5,-23.999995)"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="true"
+           sodipodi:arg2="0.78539816"
+           sodipodi:arg1="0"
+           sodipodi:r2="7.7781744"
+           sodipodi:r1="11"
+           sodipodi:cy="303.36218"
+           sodipodi:cx="132"
+           sodipodi:sides="4"
+           id="path3789"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           id="path3791"
+           sodipodi:sides="4"
+           sodipodi:cx="132"
+           sodipodi:cy="303.36218"
+           sodipodi:r1="11"
+           sodipodi:r2="7.7781744"
+           sodipodi:arg1="0"
+           sodipodi:arg2="0.78539816"
+           inkscape:flatsided="true"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           transform="translate(154.75,-23.999995)" />
+        <path
+           transform="translate(190,-23.999995)"
+           d="m 143,303.36218 -11,11 -11,-11 11,-11 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="true"
+           sodipodi:arg2="0.78539816"
+           sodipodi:arg1="0"
+           sodipodi:r2="7.7781744"
+           sodipodi:r1="11"
+           sodipodi:cy="303.36218"
+           sodipodi:cx="132"
+           sodipodi:sides="4"
+           id="path3793"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           sodipodi:type="star" />
+      </g>
+      <rect
+         y="68.069527"
+         x="276.56424"
+         height="50.204582"
+         width="9.1923885"
+         id="center-bar"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+    </g>
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 236.79631,39.261933 25.4951,-25.495099 25.4951,25.495098 z"
+       id="deviation-marker"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/Aircraft/Instruments-3d/kln94/flightplanPages.nas b/Aircraft/Instruments-3d/kln94/flightplanPages.nas
new file mode 100644
index 000000000..e69de29bb
diff --git a/Aircraft/Instruments-3d/kln94/kln94.ac b/Aircraft/Instruments-3d/kln94/kln94.ac
new file mode 100644
index 000000000..95f2e35c7
--- /dev/null
+++ b/Aircraft/Instruments-3d/kln94/kln94.ac
@@ -0,0 +1,1100 @@
+AC3Db
+MATERIAL "DefaultWhite" rgb 1.0000 1.0000 1.0000  amb 0.2000 0.2000 0.2000  emis 0.0000 0.0000 0.0000  spec 0.5000 0.5000 0.5000  shi 10 trans 0.0000
+MATERIAL "ac3dmat1" rgb 1.0000 1.0000 1.0000  amb 1.0000 1.0000 1.0000  emis 0.0000 0.0000 0.0000  spec 0.0000 0.0000 0.0000  shi 50 trans 0.0000
+OBJECT world
+name "Blender_export__kln94.ac"
+kids 14
+OBJECT poly
+name "alt-btn"
+loc 0.0055797 -0.0150158 0.0137356
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 -0.0050766
+-0.0012127 0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+5 0.385231 0.051645
+2 0.385231 0.019019
+1 0.440236 0.019019
+6 0.440236 0.051645
+SURF 0X30
+mat 1
+refs 4
+0 0.437719 0.049125
+7 0.437719 0.045280
+6 0.389657 0.045280
+1 0.389657 0.049125
+SURF 0X30
+mat 1
+refs 4
+4 0.389657 0.049125
+3 0.389657 0.045280
+2 0.437719 0.045280
+5 0.437719 0.049125
+SURF 0X30
+mat 1
+refs 4
+7 0.388697 0.023085
+4 0.388697 0.020392
+5 0.438579 0.020392
+6 0.438579 0.023085
+SURF 0X30
+mat 1
+refs 4
+0 0.388184 0.023874
+1 0.388184 0.021447
+2 0.437528 0.021447
+3 0.437528 0.023874
+kids 0
+OBJECT poly
+name "base"
+loc -0.0000000 0.0000000 -0.0000000
+texture "kln94.png"
+texrep 1 1
+numvert 8
+0.0050000 0.0302263 0.0793500
+0.0050000 0.0302263 -0.0793500
+0.0050000 -0.0207000 -0.0793500
+0.0050000 -0.0207000 0.0793500
+-0.0050000 -0.0207000 0.0793500
+-0.0050000 -0.0207000 -0.0793500
+-0.0050000 0.0302119 -0.0793500
+-0.0050000 0.0302119 0.0793500
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+0 0.000001 0.315633
+3 0.000001 0.000000
+2 0.998895 0.000000
+1 0.998895 0.315633
+SURF 0X30
+mat 1
+refs 4
+3 0.722656 0.652778
+4 0.964844 0.652778
+5 0.964844 0.685981
+2 0.722656 0.685981
+SURF 0X30
+mat 1
+refs 4
+7 0.722656 0.652778
+0 0.964844 0.652778
+1 0.964844 0.685981
+6 0.722656 0.685981
+SURF 0X30
+mat 1
+refs 4
+0 0.722656 0.652778
+7 0.964844 0.652778
+4 0.964844 0.685981
+3 0.722656 0.685981
+SURF 0X30
+mat 1
+refs 4
+2 0.722656 0.652778
+5 0.964844 0.652778
+6 0.964844 0.685981
+1 0.722656 0.685981
+kids 0
+OBJECT poly
+name "clr-btn"
+loc 0.0055797 -0.0149416 -0.0292896
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 -0.0050766
+-0.0012127 -0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+7 0.660486 0.023405
+6 0.660486 0.020978
+5 0.709829 0.020978
+4 0.709829 0.023405
+SURF 0X30
+mat 1
+refs 4
+0 0.660998 0.022616
+3 0.660998 0.019923
+2 0.710881 0.019923
+1 0.710881 0.022616
+SURF 0X30
+mat 1
+refs 4
+3 0.661959 0.048656
+4 0.661959 0.044811
+5 0.710020 0.044811
+2 0.710020 0.048656
+SURF 0X30
+mat 1
+refs 4
+7 0.710020 0.048656
+0 0.710020 0.044811
+1 0.661959 0.044811
+6 0.661959 0.048656
+SURF 0X30
+mat 1
+refs 4
+2 0.657532 0.051176
+5 0.657532 0.018550
+6 0.712538 0.018550
+1 0.712538 0.051176
+kids 0
+OBJECT poly
+name "crsr-btn"
+loc 0.0055797 0.0147900 -0.0631796
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 -0.0050766
+-0.0012127 0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+5 0.869303 0.242886
+2 0.869303 0.210260
+1 0.924310 0.210260
+6 0.924310 0.242886
+SURF 0X30
+mat 1
+refs 4
+0 0.921792 0.240366
+7 0.921792 0.236521
+6 0.873731 0.236521
+1 0.873731 0.240366
+SURF 0X30
+mat 1
+refs 4
+4 0.873731 0.240366
+3 0.873731 0.236521
+2 0.921792 0.236521
+5 0.921792 0.240366
+SURF 0X30
+mat 1
+refs 4
+7 0.872769 0.214326
+4 0.872769 0.211633
+5 0.922653 0.211633
+6 0.922653 0.214326
+SURF 0X30
+mat 1
+refs 4
+0 0.872257 0.215115
+1 0.872257 0.212688
+2 0.921600 0.212688
+3 0.921600 0.215115
+kids 0
+OBJECT poly
+name "dto-btn"
+loc 0.0055797 -0.0150158 -0.0150005
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 -0.0050766
+-0.0012127 0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+5 0.567964 0.050395
+2 0.567964 0.017769
+1 0.622970 0.017769
+6 0.622970 0.050395
+SURF 0X30
+mat 1
+refs 4
+0 0.620452 0.047875
+7 0.620452 0.044030
+6 0.572391 0.044030
+1 0.572391 0.047875
+SURF 0X30
+mat 1
+refs 4
+4 0.572391 0.047875
+3 0.572391 0.044030
+2 0.620452 0.044030
+5 0.620452 0.047875
+SURF 0X30
+mat 1
+refs 4
+7 0.571430 0.021835
+4 0.571430 0.019142
+5 0.621313 0.019142
+6 0.621313 0.021835
+SURF 0X30
+mat 1
+refs 4
+0 0.570918 0.022624
+1 0.570918 0.020197
+2 0.620261 0.020197
+3 0.620261 0.022624
+kids 0
+OBJECT poly
+name "ent-btn"
+loc 0.0055797 -0.0148610 -0.0438817
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 -0.0050766
+-0.0012127 0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+5 0.750032 0.053176
+2 0.750032 0.020550
+1 0.805038 0.020550
+6 0.805038 0.053176
+SURF 0X30
+mat 1
+refs 4
+0 0.802520 0.050656
+7 0.802520 0.046811
+6 0.754459 0.046811
+1 0.754459 0.050656
+SURF 0X30
+mat 1
+refs 4
+4 0.754459 0.050656
+3 0.754459 0.046811
+2 0.802520 0.046811
+5 0.802520 0.050656
+SURF 0X30
+mat 1
+refs 4
+7 0.753498 0.024616
+4 0.753498 0.021923
+5 0.803381 0.021923
+6 0.803381 0.024616
+SURF 0X30
+mat 1
+refs 4
+0 0.752986 0.025405
+1 0.752986 0.022978
+2 0.802329 0.022978
+3 0.802329 0.025405
+kids 0
+OBJECT poly
+name "knob-brightness"
+loc 0.0070680 -0.0108757 0.0640361
+texture "kln94.png"
+texrep 1 1
+numvert 25
+0.0003175 0.0001219 0.0000000
+-0.0019742 0.0001219 0.0042385
+-0.0019742 -0.0019974 0.0036706
+-0.0019742 -0.0035487 0.0021192
+-0.0019742 -0.0041166 0.0000000
+-0.0019742 -0.0035487 -0.0021192
+-0.0019742 -0.0019973 -0.0036706
+-0.0019742 0.0001219 -0.0042385
+-0.0019742 0.0022411 -0.0036706
+-0.0019742 0.0037925 -0.0021192
+-0.0019742 0.0043604 0.0000000
+-0.0019742 0.0037925 0.0021192
+-0.0019742 0.0022411 0.0036706
+0.0019834 0.0001219 0.0042385
+0.0019834 -0.0019974 0.0036706
+0.0019834 -0.0035487 0.0021192
+0.0019834 -0.0041166 0.0000000
+0.0019888 -0.0035487 -0.0021192
+0.0019888 -0.0019973 -0.0036706
+0.0019888 0.0001219 -0.0042385
+0.0019888 0.0022411 -0.0036706
+0.0019888 0.0037925 -0.0021192
+0.0019834 0.0043604 0.0000000
+0.0019834 0.0037925 0.0021192
+0.0019834 0.0022411 0.0036706
+numsurf 24
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+24 0.873306 0.113743
+13 0.867723 0.092904
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+13 0.867723 0.092904
+14 0.873306 0.072065
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+14 0.873306 0.072065
+15 0.888562 0.056810
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+15 0.888562 0.056810
+16 0.909401 0.051226
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+16 0.909401 0.051226
+17 0.930240 0.056810
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+17 0.930240 0.056810
+18 0.945495 0.072065
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+18 0.945495 0.072065
+19 0.951079 0.092904
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+19 0.951079 0.092904
+20 0.945495 0.113743
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+20 0.945495 0.113743
+21 0.930240 0.128999
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+21 0.930240 0.128999
+22 0.909401 0.134582
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+22 0.909401 0.134582
+23 0.888562 0.128999
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+23 0.888562 0.128999
+24 0.873306 0.113743
+SURF 0X30
+mat 1
+refs 4
+24 0.873306 0.113743
+12 0.873306 0.113743
+1 0.867723 0.092904
+13 0.867723 0.092904
+SURF 0X30
+mat 1
+refs 4
+13 0.867723 0.092904
+1 0.867723 0.092904
+2 0.873306 0.072065
+14 0.873306 0.072065
+SURF 0X30
+mat 1
+refs 4
+14 0.873306 0.072065
+2 0.873306 0.072065
+3 0.888562 0.056810
+15 0.888562 0.056810
+SURF 0X30
+mat 1
+refs 4
+15 0.888562 0.056810
+3 0.888562 0.056810
+4 0.909401 0.051226
+16 0.909401 0.051226
+SURF 0X30
+mat 1
+refs 4
+16 0.909401 0.051226
+4 0.909401 0.051226
+5 0.930240 0.056810
+17 0.930240 0.056810
+SURF 0X30
+mat 1
+refs 4
+17 0.930240 0.056810
+5 0.930240 0.056810
+6 0.945495 0.072065
+18 0.945495 0.072065
+SURF 0X30
+mat 1
+refs 4
+18 0.945495 0.072065
+6 0.945495 0.072065
+7 0.951079 0.092904
+19 0.951079 0.092904
+SURF 0X30
+mat 1
+refs 4
+19 0.951079 0.092904
+7 0.951079 0.092904
+8 0.945495 0.113743
+20 0.945495 0.113743
+SURF 0X30
+mat 1
+refs 4
+20 0.945495 0.113743
+8 0.945495 0.113743
+9 0.930240 0.128999
+21 0.930240 0.128999
+SURF 0X30
+mat 1
+refs 4
+21 0.930240 0.128999
+9 0.930240 0.128999
+10 0.909401 0.134582
+22 0.909401 0.134582
+SURF 0X30
+mat 1
+refs 4
+22 0.909401 0.134582
+10 0.909401 0.134582
+11 0.888562 0.128999
+23 0.888562 0.128999
+SURF 0X30
+mat 1
+refs 4
+23 0.888562 0.128999
+11 0.888562 0.128999
+12 0.873306 0.113743
+24 0.873306 0.113743
+kids 0
+OBJECT poly
+name "knob-inner"
+loc 0.0112497 -0.0038825 -0.0621865
+texture "kln94.png"
+texrep 1 1
+numvert 25
+0.0017683 0.0000000 0.0000000
+-0.0017683 -0.0000000 0.0065408
+-0.0017683 -0.0032704 0.0056645
+-0.0017683 -0.0056645 0.0032704
+-0.0017683 -0.0065408 0.0000000
+-0.0017683 -0.0056645 -0.0032704
+-0.0017683 -0.0032704 -0.0056645
+-0.0017683 0.0000000 -0.0065408
+-0.0017683 0.0032704 -0.0056645
+-0.0017683 0.0056645 -0.0032704
+-0.0017683 0.0065408 0.0000000
+-0.0017683 0.0056645 0.0032704
+-0.0017683 0.0032704 0.0056645
+0.0017683 -0.0000000 0.0065408
+0.0017683 -0.0032704 0.0056645
+0.0017683 -0.0056645 0.0032704
+0.0017683 -0.0065408 0.0000000
+0.0017683 -0.0056645 -0.0032704
+0.0017683 -0.0032704 -0.0056645
+0.0017683 0.0000000 -0.0065408
+0.0017683 0.0032704 -0.0056645
+0.0017683 0.0056645 -0.0032704
+0.0017683 0.0065408 0.0000000
+0.0017683 0.0056645 0.0032704
+0.0017683 0.0032704 0.0056645
+numsurf 24
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+24 0.873306 0.113743
+13 0.867723 0.092904
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+13 0.867723 0.092904
+14 0.873306 0.072065
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+14 0.873306 0.072065
+15 0.888562 0.056810
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+15 0.888562 0.056810
+16 0.909401 0.051226
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+16 0.909401 0.051226
+17 0.930240 0.056810
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+17 0.930240 0.056810
+18 0.945495 0.072065
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+18 0.945495 0.072065
+19 0.951079 0.092904
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+19 0.951079 0.092904
+20 0.945495 0.113743
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+20 0.945495 0.113743
+21 0.930240 0.128999
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+21 0.930240 0.128999
+22 0.909401 0.134582
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+22 0.909401 0.134582
+23 0.888562 0.128999
+SURF 0X30
+mat 1
+refs 3
+0 0.909401 0.092904
+23 0.888562 0.128999
+24 0.873306 0.113743
+SURF 0X30
+mat 1
+refs 4
+24 0.873306 0.113743
+12 0.873306 0.113743
+1 0.867723 0.092904
+13 0.867723 0.092904
+SURF 0X30
+mat 1
+refs 4
+13 0.867723 0.092904
+1 0.867723 0.092904
+2 0.873306 0.072065
+14 0.873306 0.072065
+SURF 0X30
+mat 1
+refs 4
+14 0.873306 0.072065
+2 0.873306 0.072065
+3 0.888562 0.056810
+15 0.888562 0.056810
+SURF 0X30
+mat 1
+refs 4
+15 0.888562 0.056810
+3 0.888562 0.056810
+4 0.909401 0.051226
+16 0.909401 0.051226
+SURF 0X30
+mat 1
+refs 4
+16 0.909401 0.051226
+4 0.909401 0.051226
+5 0.930240 0.056810
+17 0.930240 0.056810
+SURF 0X30
+mat 1
+refs 4
+17 0.930240 0.056810
+5 0.930240 0.056810
+6 0.945495 0.072065
+18 0.945495 0.072065
+SURF 0X30
+mat 1
+refs 4
+18 0.945495 0.072065
+6 0.945495 0.072065
+7 0.951079 0.092904
+19 0.951079 0.092904
+SURF 0X30
+mat 1
+refs 4
+19 0.951079 0.092904
+7 0.951079 0.092904
+8 0.945495 0.113743
+20 0.945495 0.113743
+SURF 0X30
+mat 1
+refs 4
+20 0.945495 0.113743
+8 0.945495 0.113743
+9 0.930240 0.128999
+21 0.930240 0.128999
+SURF 0X30
+mat 1
+refs 4
+21 0.930240 0.128999
+9 0.930240 0.128999
+10 0.909401 0.134582
+22 0.909401 0.134582
+SURF 0X30
+mat 1
+refs 4
+22 0.909401 0.134582
+10 0.909401 0.134582
+11 0.888562 0.128999
+23 0.888562 0.128999
+SURF 0X30
+mat 1
+refs 4
+23 0.888562 0.128999
+11 0.888562 0.128999
+12 0.873306 0.113743
+24 0.873306 0.113743
+kids 0
+OBJECT poly
+name "knob-outer"
+loc 0.0065490 -0.0038825 -0.0621865
+texture "kln94.png"
+texrep 1 1
+numvert 25
+0.0024725 0.0045729 0.0079206
+0.0024725 0.0079206 0.0045729
+0.0024725 0.0091459 0.0000000
+0.0024725 0.0079206 -0.0045730
+0.0024725 0.0045729 -0.0079206
+0.0024725 0.0000000 -0.0091459
+0.0024725 -0.0045729 -0.0079206
+0.0024725 -0.0079206 -0.0045730
+0.0024725 -0.0091459 0.0000000
+0.0024725 -0.0079206 0.0045729
+0.0024725 -0.0045730 0.0079206
+0.0024725 -0.0000000 0.0091459
+-0.0013043 0.0045729 0.0079206
+-0.0013043 0.0079206 0.0045729
+-0.0013043 0.0091459 0.0000000
+-0.0013043 0.0079206 -0.0045730
+-0.0013043 0.0045729 -0.0079206
+-0.0013043 0.0000000 -0.0091459
+-0.0013043 -0.0045729 -0.0079206
+-0.0013043 -0.0079206 -0.0045730
+-0.0013043 -0.0091459 0.0000000
+-0.0013043 -0.0079206 0.0045729
+-0.0013043 -0.0045730 0.0079206
+-0.0013043 -0.0000000 0.0091459
+0.0024725 -0.0000000 0.0000000
+numsurf 24
+SURF 0X30
+mat 1
+refs 4
+12 0.880262 0.143374
+0 0.880262 0.143374
+1 0.858931 0.122043
+13 0.858931 0.122043
+SURF 0X30
+mat 1
+refs 4
+2 0.909401 0.151182
+14 0.909401 0.151182
+13 0.880262 0.143374
+1 0.880262 0.143374
+SURF 0X30
+mat 1
+refs 4
+3 0.938540 0.143374
+15 0.938540 0.143374
+14 0.909401 0.151182
+2 0.909401 0.151182
+SURF 0X30
+mat 1
+refs 4
+4 0.959871 0.122043
+16 0.959871 0.122043
+15 0.938540 0.143374
+3 0.938540 0.143374
+SURF 0X30
+mat 1
+refs 4
+5 0.967679 0.092904
+17 0.967679 0.092904
+16 0.959871 0.122043
+4 0.959871 0.122043
+SURF 0X30
+mat 1
+refs 4
+6 0.959871 0.063765
+18 0.959871 0.063765
+17 0.967679 0.092904
+5 0.967679 0.092904
+SURF 0X30
+mat 1
+refs 4
+7 0.938540 0.042434
+19 0.938540 0.042434
+18 0.959871 0.063765
+6 0.959871 0.063765
+SURF 0X30
+mat 1
+refs 4
+8 0.909401 0.034626
+20 0.909401 0.034626
+19 0.938540 0.042434
+7 0.938540 0.042434
+SURF 0X30
+mat 1
+refs 4
+9 0.880262 0.042434
+21 0.880262 0.042434
+20 0.909401 0.034626
+8 0.909401 0.034626
+SURF 0X30
+mat 1
+refs 4
+10 0.858931 0.063765
+22 0.858931 0.063765
+21 0.880262 0.042434
+9 0.880262 0.042434
+SURF 0X30
+mat 1
+refs 4
+11 0.851123 0.092904
+23 0.851123 0.092904
+22 0.858931 0.063765
+10 0.858931 0.063765
+SURF 0X30
+mat 1
+refs 4
+0 0.858931 0.122043
+12 0.858931 0.122043
+23 0.851123 0.092904
+11 0.851123 0.092904
+SURF 0X30
+mat 1
+refs 3
+1 0.909401 0.092904
+0 0.880262 0.143374
+24 0.858931 0.122043
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+2 0.909401 0.151182
+1 0.880262 0.143374
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+3 0.938540 0.143374
+2 0.909401 0.151182
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+4 0.959871 0.122043
+3 0.938540 0.143374
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+5 0.967679 0.092904
+4 0.959871 0.122043
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+6 0.959871 0.063765
+5 0.967679 0.092904
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+7 0.938540 0.042434
+6 0.959871 0.063765
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+8 0.909401 0.034626
+7 0.938540 0.042434
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+9 0.880262 0.042434
+8 0.909401 0.034626
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+10 0.858931 0.063765
+9 0.880262 0.042434
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+11 0.851123 0.092904
+10 0.858931 0.063765
+SURF 0X30
+mat 1
+refs 3
+24 0.909401 0.092904
+0 0.858931 0.122043
+11 0.851123 0.092904
+kids 0
+OBJECT poly
+name "msg-btn"
+loc 0.0055797 -0.0151679 0.0430479
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 -0.0050766
+0.0012127 -0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 0.0050766
+0.0012127 0.0027196 -0.0050766
+-0.0012127 0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+5 0.202809 0.051645
+2 0.202809 0.019019
+1 0.257814 0.019019
+6 0.257814 0.051645
+SURF 0X30
+mat 1
+refs 4
+0 0.255297 0.049125
+7 0.255297 0.045280
+6 0.207236 0.045280
+1 0.207236 0.049125
+SURF 0X30
+mat 1
+refs 4
+4 0.207236 0.049125
+3 0.207236 0.045280
+2 0.255297 0.045280
+5 0.255297 0.049125
+SURF 0X30
+mat 1
+refs 4
+7 0.206275 0.023085
+4 0.206275 0.020392
+5 0.256157 0.020392
+6 0.256157 0.023085
+SURF 0X30
+mat 1
+refs 4
+0 0.205763 0.023874
+1 0.205763 0.021447
+2 0.255106 0.021447
+3 0.255106 0.023874
+kids 0
+OBJECT poly
+name "nrst-btn"
+loc 0.0055797 -0.0150223 -0.0007310
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 -0.0050766
+-0.0012127 -0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+7 0.478419 0.023874
+6 0.478419 0.021447
+5 0.527762 0.021447
+4 0.527762 0.023874
+SURF 0X30
+mat 1
+refs 4
+0 0.478931 0.023085
+3 0.478931 0.020392
+2 0.528814 0.020392
+1 0.528814 0.023085
+SURF 0X30
+mat 1
+refs 4
+3 0.479892 0.049125
+4 0.479892 0.045280
+5 0.527953 0.045280
+2 0.527953 0.049125
+SURF 0X30
+mat 1
+refs 4
+7 0.527953 0.049125
+0 0.527953 0.045280
+1 0.479892 0.045280
+6 0.479892 0.049125
+SURF 0X30
+mat 1
+refs 4
+2 0.475465 0.051645
+5 0.475465 0.019019
+6 0.530471 0.019019
+1 0.530471 0.051645
+kids 0
+OBJECT poly
+name "obs-btn"
+loc 0.0055797 -0.0150158 0.0285507
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 -0.0050766
+-0.0012127 -0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+7 0.295512 0.023874
+6 0.295512 0.021447
+5 0.344855 0.021447
+4 0.344855 0.023874
+SURF 0X30
+mat 1
+refs 4
+0 0.296024 0.023085
+3 0.296024 0.020392
+2 0.345907 0.020392
+1 0.345907 0.023085
+SURF 0X30
+mat 1
+refs 4
+3 0.296985 0.049125
+4 0.296985 0.045280
+5 0.345046 0.045280
+2 0.345046 0.049125
+SURF 0X30
+mat 1
+refs 4
+7 0.345046 0.049125
+0 0.345046 0.045280
+1 0.296985 0.045280
+6 0.296985 0.049125
+SURF 0X30
+mat 1
+refs 4
+2 0.292558 0.051645
+5 0.292558 0.019019
+6 0.347564 0.019019
+1 0.347564 0.051645
+kids 0
+OBJECT poly
+name "proc-btn"
+loc 0.0055797 0.0146801 0.0588151
+texture "kln94.png"
+texrep 1 1
+numvert 8
+-0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 -0.0050766
+0.0012127 0.0027196 0.0050766
+-0.0012127 0.0027196 0.0050766
+-0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 0.0050766
+0.0012127 -0.0027196 -0.0050766
+-0.0012127 -0.0027196 -0.0050766
+numsurf 5
+SURF 0X30
+mat 1
+refs 4
+7 0.104981 0.212771
+6 0.104981 0.210345
+5 0.154325 0.210345
+4 0.154325 0.212771
+SURF 0X30
+mat 1
+refs 4
+0 0.106544 0.213032
+3 0.106544 0.210340
+2 0.156427 0.210340
+1 0.156427 0.213032
+SURF 0X30
+mat 1
+refs 4
+3 0.106454 0.238023
+4 0.106454 0.234178
+5 0.154516 0.234178
+2 0.154516 0.238023
+SURF 0X30
+mat 1
+refs 4
+7 0.154516 0.238023
+0 0.154516 0.234178
+1 0.106454 0.234178
+6 0.106454 0.238023
+SURF 0X30
+mat 1
+refs 4
+2 0.102028 0.240543
+5 0.102028 0.207917
+6 0.157033 0.207917
+1 0.157033 0.240543
+kids 0
+OBJECT poly
+name "screen"
+loc 0.0052287 0.0083597 0.0029861
+numvert 4
+-0.0000000 -0.0169880 -0.0441660
+-0.0000000 0.0169880 -0.0441660
+0.0000000 -0.0169880 0.0441660
+0.0000000 0.0169880 0.0441660
+numsurf 1
+SURF 0X20
+mat 0
+refs 4
+3 0 0
+2 0 0
+0 0 0
+1 0 0
+kids 0
diff --git a/Aircraft/Instruments-3d/kln94/kln94.blend b/Aircraft/Instruments-3d/kln94/kln94.blend
new file mode 100644
index 000000000..c117b2aea
Binary files /dev/null and b/Aircraft/Instruments-3d/kln94/kln94.blend differ
diff --git a/Aircraft/Instruments-3d/kln94/kln94.nas b/Aircraft/Instruments-3d/kln94/kln94.nas
new file mode 100644
index 000000000..969d41575
--- /dev/null
+++ b/Aircraft/Instruments-3d/kln94/kln94.nas
@@ -0,0 +1,385 @@
+var kln94 = nil;
+
+var KLN94 = {
+
+  Page: {
+    new : func(owner, s, idx)
+    {
+        m = { 
+            parents:[KLN94.Page],
+            section: s,
+            index: idx
+        };
+        return m;
+    },
+    
+    # encode various behavioural flags as predicates
+    # real Pages can over-ride these defaults as needed
+    hasActiveIdent: func { return 0; },    
+    numberOfCyanLines: func { return 0; },
+    showsCDI: func { return 0; },
+    isMulti: func { return 0; },
+    
+    # cursor stuff
+    
+    display: func(gps)
+    {
+    
+    },
+    
+    refresh: func(gps)
+    {
+    
+    },
+  
+  },
+
+  pageNames : ['APT', 'VOR', 'NDB', 'INT', 'USR', 'ACT', 'NAV', 'FPL', 'SET', 'AUX'],
+  
+  PAGE_APT: 0,
+  PAGE_VOR: 1,
+  PAGE_NDB: 2,
+  PAGE_INT: 3,
+  PAGE_USR: 4,
+  PAGE_ACT: 5,
+  PAGE_NAV: 6,
+  PAGE_FPL: 7,
+  PAGE_SET: 8,
+  PAGE_AUX: 9,
+  
+  
+  PAGE_BAR_HEIGHT: 20,
+  NAV_DATA_WIDTH: 128,
+  
+  canvas_settings: {
+      "name": "KLN94",
+      "size": [512, 256],
+      "view": [480, 160],
+      "mipmapping": 1,
+  },
+  
+  new : func(prop1, placement)
+  {
+      m = { parents : [KLN94]};
+
+      m.rootNode = props.globals.initNode(prop1);   
+      m._setupCanvas(placement);
+      m._page = nil;
+      
+      m._messageScreenActive = 0;
+      m._messages = [];
+      
+      m._cursorActive = 0;
+      m._cursorField = 0;
+      m._enterAction = nil;
+      
+      
+      m._setupProps();
+      
+      return m;
+  },
+  
+  _setupCanvas: func(placement)
+  {
+      me._canvas = canvas.new(KLN94.canvas_settings);        
+      var text_style = {
+          'font': "LiberationFonts/LiberationMono-Bold.ttf",
+          'character-size': 34,
+          'character-aspect-ratio': 1.2
+      };
+      
+      me.rootNode.initNode('brightness-norm', 0.5, 'DOUBLE');
+      
+      me._canvas.setColorBackground(1.0, 0.0, 0.0);
+      me._canvas.addPlacement(placement);
+      
+      me._navDataArea = me._canvas.createGroup();
+      me._navDataArea.setTranslation(0, 0);
+      me._navDataLines = [];
+      
+      var navAreaH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 2;
+      var r1 = me._navDataArea.rect(0, 0, KLN94.NAV_DATA_WIDTH, navAreaH);
+      var r2 = me._navDataArea.rect(0, navAreaH, KLN94.NAV_DATA_WIDTH, navAreaH);
+      r1.setColor(0,1,1); # cyan
+      r2.setColor(0,1,1);
+      
+      var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
+      
+      for (var i=0; i<4; i +=1) {
+        var t = me._navDataArea.createChild("text");
+        t.setColor(1, 1, 1);
+        t._node.setValues(text_style);
+        t.setAlignment("left-center");
+        t.setTranslation(0.0, (i + 0.5) * lineH);        
+        append(me._navDataLines, t);
+      }
+      
+      me._pageBarArea = me._canvas.createGroup();
+      me._pageBarArea.setTranslation(0, KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT);
+      
+      var ln = me._pageBarArea.createChild('path');
+      ln.setColor(0,1,1); # cyan
+      
+      me._pageBarText = me._pageBarArea.createChild("text");
+      me._pageBarText._node.setValues(text_style);
+      me._pageBarText.setAlignment("left-center");
+      me._pageBarText.setColor(0, 0, 1);
+      
+      me._pageBarInverseText = me._pageBarArea.createChild("text");
+      me._pageBarInverseText._node.setValues(text_style);
+      me._pageBarInverseText.setAlignment("left-center");
+      me._pageBarInverseText.setColor(1, 1, 1);
+      me._pageBarInverseText.setColorFill(0, 0, 1);
+      
+      me._pageArea = me._canvas.createGroup();
+      me._pageBarArea.setTranslation(100, 0);
+      
+      me._pageAreaLines = [];
+      for (var i=0; i<5; i +=1) {
+        var t = me._pageArea.createChild("text");
+        t.setColor(0, 1, 0);
+        t._node.setValues(text_style);
+        t.setAlignment("left-center");
+        t.setTranslation(0.0, (i + 0.5) * lineH);        
+        append(me._pageAreaLines, t);
+      }
+      
+      # inverted text block
+      me._pageAreaInverted = me._pageArea.createChild("text");
+      me._pageAreaInverted.setColor(0, 0, 0);
+      me._pageAreaInverted.setColorFill(0, 1, 0);
+      me._pageAreaInverted._node.setValues(text_style);
+      me._pageAreaInverted.setAlignment("left-center");
+      
+      me._cdiGroup = me._pageArea.createChild("group");
+      canvas.parsesvg(me._cdiGroup, resolvepath('Aircraft/Instruments-3d/kln94/cdi.svg'));
+      me._cdiGroup.setTranslation(0, lineH);
+  },
+  
+  _setupProps: func
+  {
+    var p = me.rootNode;
+    me.props = {
+      distanceToActiveNm: p.getNode(),
+      groundspeedKt: p.getNode(),
+      activeIdent: p.getNode(),
+      previousIdent: p.getNode(),
+      obsBearing: p.getNode(),
+      legTrack: p.getNode(),
+      groundTrack: p.getNode(),
+      cdiDeviationNm: p.getNode(),
+    };
+  },
+  
+  _setActivePage: func(pg)
+  {
+    me._page = pg;
+    if (pg == nil) return;
+    
+    # update line colors
+    for (var l=0; l<4; l+=1) {
+      me._pageAreaLines[l].setColor(0, 1, l < pg.numberOfCyanLines() ? 1 : 0);
+    }
+    
+    # hide or show the CDI area as appropriate
+    me._cdiGroup.setVisible(pg.showsCDI());
+  },
+  
+  _updateNavData : func
+  {
+    me._navDataLines[0].setText(sprintf('%4dnm', me._props.distanceToActiveNm.getValue()));
+    if (me._page.hasActiveIdent()) {
+      me._navDataLines[1].setText(sprintf('%4dkt', me._props.groundspeedKt.getValue()));
+    } else {
+      me._navDataLines[1].setText(me._props.activeIdent.getValue());
+    }
+    if (me._obsMode) {
+      me._navDataLines[2].setText(sprintf('OBS%03d*', me._props.obsBearing.getValue()));      
+    } else {
+      me._navDataLines[2].setText(sprintf('DTK%03d*', me._props.legTrack.getValue()));
+    }
+    me._navDataLines[3].setText(sprintf(' TK%03d*', me._props.groundTrack.getValue()));
+  },
+  
+  _updateAnnunciationArea : func
+  {
+    if (size(me._messages) > 0) {
+      # show 'M' symbol
+    }
+    
+    if (me._enterAction != nil) {
+      # show 'ENT' symbol
+    }
+  
+  },
+  
+  _updatePageBar : func
+  {
+    # hide in NAV-4 mode
+    if (me.inNav4Mode()) {
+      me._pageBarGroup.setVisible(0);
+      return;
+    }
+    
+    if (me._cursorActive) {
+      me._pageBarText.setText('');
+      var t = '    * CRSR *  ' ~ me.pageNames[activePage] ~ ' * CRSR *';
+      me._pageBarInverseText.setText(t);
+      return;
+    }
+    
+    # assemble the string
+    var barString = '';
+    var inverseBarString = '';
+    var activePage = me.pageIndex[0];
+    
+    for (var i=0; i < 10; i += 1) {
+      if (activePage == i) {
+        var sep = me.isMultiPage() ? '+' : ' ';
+        inverseBarString ~= me.pageNames[i] ~ sep ~ me.pageIndex[1];
+        barString ~= '     '; # 5 spaces
+      } else {
+        barString ~= ' ' ~ me.pageNames[i];
+        if (i < activePage)
+          inverseBarString ~= '    '; # 4 spaces
+      }
+    }
+    
+    me._pageBarText.setText(barString);
+    me._pageBarInverseText.setText(inverseBarString);
+  },
+  
+  _setInverted: func(line, firstcol, numcols=1)
+  {
+    var t = me._pageAreaInverted;
+    var cellW = 20.0;
+    var lineH = (KLN94.canvas_settings.view[1] - KLN94.PAGE_BAR_HEIGHT) / 5;
+    t.setTranslation(firstcol * cellW, (line + 0.5) * lineH);        
+    t.setText(substr(me._pageAreaLines[line].getText(), firstcol, numcols));
+    t.setVisible(1);
+  },
+  
+  _setBlink: func(line, firstcol, numcols=1)
+  {
+    
+  },
+  
+  isPageActive: func(nm, idx) 
+  {
+    if (me._page == nil) return 0;
+    return (me._page.section == nm) and (me._page.index == idx);
+  },
+  
+  isMultiPage: func { return me._page.isMulti(); },
+  
+  toggleCursor: func
+  {
+    me._cursorActive = !me._cursorActive;
+    if (me._cursorActive) {
+      me._cursorField = 0;
+    }
+    
+    me._updatePageBar();
+  },
+  
+  messageButton: func
+  {
+    if (me._messageScreenActive) {
+      me._messages = me._messages[1:]; # pop front
+      if (size(me._messages) == 0) {
+        me._messageScreenActive = 0;
+        # refresh normal screen
+        return;
+      }
+      
+      me._buildMessageScreen();
+      return;
+    }
+    
+    if (size(me._messages) == 0) {
+      debug.dump('no messages to show');
+      return;
+    }
+    
+    me._messageScreenActive = 1;
+    me._buildMessageScreen();
+  },
+  
+  _buildMessageScreen: func
+  {
+    
+  },
+  
+  # Nav4 mode is special
+  inNav4Mode: func { return me.isPageActive(NAV, 4); },
+  
+  formatDuration: func(timeInSeconds)
+  {
+    if (timeInSeconds > 60) {
+      return sprintf("0:%02d", timeInSeconds);
+    }
+    
+    if (timeInSeconds > 3600) {
+      var mins = int(timeInSeconds / 60);
+      var secs = timeInSeconds - (mins * 60);
+      return sprintf("%d:%02d", mins, secs);
+    }
+    
+    var hours = int(timeInSeconds / 3600);
+    timeInSeconds -= (hours * 3600);
+    var mins = int(timeInSeconds / 60);
+    var secs = timeInSeconds - (mins * 60);
+    return sprintf("%d:%02d:%02d", hours, mins, secs); 
+  },
+  
+  formatLatitude: func(lat)
+  {
+      var north = (lat >= 0.0);
+      var latDeg = int(lat);
+      var latMinutes = math.abs(lat - latDeg) * 60;
+      return sprintf('%s%02d*%04.1f', north ? "N" : "S", abs(latDeg), latMinutes);
+  },
+  
+  formatLongitude: func(lon)
+  {
+       var east = (lon >= 0.0);
+       var lonDeg = int(lon);
+       var lonMinutes = math.abs(lon - lonDeg) * 60;
+       sprintf("%s%03d*%04.1f", east ? 'E' : 'W', abs(lonDeg), lonMinutes);        
+  },
+};
+
+
+reload_gps = func 
+{    
+    kln94._setActivePage(nil); # force existing page to be undisplayed cleanly
+  
+    # make the cdu instance available inside the module namespace
+    # we are going to load into.
+    # for a reload this also wipes the existing namespace, which we want
+    globals['kln94_NS'] = { gps: kln94, KLN94:KLN94 };
+
+    var pages = ['navPages.nas', 'infoPages.nas', 'flightplanPages.nas', 'settingPages.nas', 'auxPages.nas'];
+
+    #var settings = props.globals.getNode('/instrumentation/cdu/settings');
+    foreach (var path; pages) {        
+        # resolve the path in FG_ROOT, and --fg-aircraft dir, etc
+        var abspath = resolvepath('Aircraft/Instruments-3d/kln94/' ~ path);
+        if (io.stat(abspath) == nil) {
+            debug.dump('KN94 page not found:', path, abspath);
+            continue;
+        }
+
+        # load pages code into a seperate namespace which we defined above
+        # also means we can clean out that namespace later
+        io.load_nasal(abspath, 'kln94_NS');
+    }
+ #   cdu.displayPageByTag(getprop('/instrumentation/cdu/settings/boot-page'));
+};
+
+setlistener("/nasal/canvas/loaded", func 
+{
+    # create base PGS
+    kln94 = KLN94.new('/instrumentation/gps', {"node": "screen"});
+    reload_gps();
+}, 1);
diff --git a/Aircraft/Instruments-3d/kln94/kln94.png b/Aircraft/Instruments-3d/kln94/kln94.png
new file mode 100644
index 000000000..f2227e14e
Binary files /dev/null and b/Aircraft/Instruments-3d/kln94/kln94.png differ
diff --git a/Aircraft/Instruments-3d/kln94/kln94.xml b/Aircraft/Instruments-3d/kln94/kln94.xml
new file mode 100644
index 000000000..fe3633546
--- /dev/null
+++ b/Aircraft/Instruments-3d/kln94/kln94.xml
@@ -0,0 +1,164 @@
+<PropertyList>
+
+<path>kln94.ac</path>
+
+<!--
+<animation> 
+	<type>material</type> 
+	<texture alias="../../texture"/> 
+</animation>
+
+<effect>
+	<inherits-from>Effects/lightmap</inherits-from>
+	<parameters>
+		<texture n="1">
+			<image>Aircraft/Instruments-3d/cdu2/boeing_lightmap.png</image>
+		</texture>
+		<condition><use>/instrumentation/cdu/serviceable</use></condition>
+
+      <factor><use>/instrumentation/cdu/brightness-norm</use></factor>
+	</parameters>
+	<object-name>CDU</object-name>
+	<object-name>Btn.side.r.1</object-name>
+	<object-name>Btn.side.r.2</object-name>
+	<object-name>Btn.side.r.3</object-name>
+	<object-name>Btn.side.r.4</object-name>
+	<object-name>Btn.side.r.5</object-name>
+	<object-name>Btn.side.r.6</object-name>
+</effect> -->
+
+<animation>
+	<type>pick</type>
+	<object-name>ent-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.enter();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>crsr-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.toggleCursorMode();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>nrst-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.nearestButton();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>dto-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.directTo();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>obs-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.obsButton();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>msg-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.messageButton();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>alt-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.altitudeButton();</script>
+		</binding>
+	</action>
+</animation>
+
+<animation>
+	<type>pick</type>
+	<object-name>clr-btn</object-name>
+	<action>
+		<repeatable>false</repeatable>  
+		<binding>
+			<command>nasal</command>
+			<script>KLN94.clearButton();</script>
+		</binding>
+	</action>
+</animation>
+
+  <animation>
+  <type>knob</type>
+  <object-name>knob-inner</object-name>
+  <action>
+      <binding>
+          <command>nasal</command>
+          <script>KLN94.innerKnob(cmdarg().getNode('offset').getValue());</script>     
+        </binding>
+  </action>
+</animation>
+
+  <animation>
+  <type>knob</type>
+  <object-name>knob-outer</object-name>
+  <action>
+      <binding>
+          <command>nasal</command>
+          <script>KLN94.outerKnob(cmdarg().getNode('offset').getValue());</script>     
+        </binding>
+  </action>
+</animation>
+
+
+    <animation>
+    <type>knob</type>
+    <object-name>knob-brightness</object-name>
+    <action>
+        <binding>
+            <command>property-adjust</command>
+            <property>/instrumentation/kln94/brightness-norm</property> 
+            <step>0.05</step>
+            <min>0</min>
+            <max>1</max>                
+            <wrap>false</wrap>       
+    </binding>
+    </action>
+  </animation>
+
+</PropertyList>
\ No newline at end of file
diff --git a/Aircraft/Instruments-3d/kln94/knob.rgb b/Aircraft/Instruments-3d/kln94/knob.rgb
new file mode 100644
index 000000000..0b9064871
Binary files /dev/null and b/Aircraft/Instruments-3d/kln94/knob.rgb differ
diff --git a/Aircraft/Instruments-3d/kln94/navPages.nas b/Aircraft/Instruments-3d/kln94/navPages.nas
new file mode 100644
index 000000000..b66114d17
--- /dev/null
+++ b/Aircraft/Instruments-3d/kln94/navPages.nas
@@ -0,0 +1,80 @@
+
+
+var Nav1Page = 
+{
+    a:2,
+  
+  
+    new: func()
+    {
+      m = {parents: [Nav1Page, KLN94.Page.new(KLN94.PAGE_NAV, 0)]};
+      return m;
+    },
+    
+    hasActiveIdent: func { 1 },
+    showsCDI: func { 1 },
+    
+    display: func(gps)
+    {
+      if (gps.isDirectToActive()) {
+        
+      } else {
+        # leg mode
+        gps.setLine(0, sprintf('%6s->%6s', 
+          gps.props.previousIdent.getStringValue(), 
+          gps.props.activeIdent.getStringValue())
+        );
+      }
+      
+      
+      gps.setLine(3, '   VNV  Off');
+      
+      var toFrom = gps.isTo() ? 'To' : 'Fr';
+      var eteToWp1 = gps.formatDuration(gps.props.timeToWaypoint.getIntValue());
+      gps.setLine(4, sprintf('%03d*%s   ', bearingToWp1, toFrom) ~ eteToWp1);
+    },
+    
+    refresh: func(gps)
+    {
+    
+    }
+};
+
+var Nav2Page = 
+{
+    new: func()
+    {
+      m = {parents: [Nav2Page, KLN94.Page.new(KLN94.PAGE_NAV, 1)]};
+      return m;
+    },
+    
+    display: func(gps)
+    {
+      # select refnavaid!
+      
+      gps.setLine(0, ' PRESENT POSN'),
+      gps.setLine(1, '    Ref:%s', gps.refNavaid.id);
+      
+      gps.setLine(3, '  ' + gps.formatLatitude(gps.props.indicatedLat.getDoubleValue()));
+      gps.setLine(4, '  ' + gps.formatLongitude(gps.props.indicatedLon.getDoubleValue()));
+    }
+};
+
+var Nav3Page = 
+{
+    new: func()
+    {
+      m = {parents: [Nav3Page, KLN94.Page.new(KLN94.PAGE_NAV, 2)]};
+      return m;
+    },
+};
+
+var nav1 = Nav1Page.new();
+gps.addPage(nav1);
+
+
+gps.addPage(Nav2Page.new());
+gps.addPage(Nav3Page.new());
+
+
+
diff --git a/Aircraft/Instruments-3d/kln94/settingPages.nas b/Aircraft/Instruments-3d/kln94/settingPages.nas
new file mode 100644
index 000000000..e69de29bb
diff --git a/Aircraft/Instruments-3d/kln94/waypointPages.nas b/Aircraft/Instruments-3d/kln94/waypointPages.nas
new file mode 100644
index 000000000..e69de29bb