diff --git a/Tools/ArdupilotMegaPlanner/Antenna/Tracker.cs b/Tools/ArdupilotMegaPlanner/Antenna/Tracker.cs
index d768645b786f05e0f20bb330437045a3bb036eb0..5db7724fd17122fb0a021f4f36251f816ee18185 100644
--- a/Tools/ArdupilotMegaPlanner/Antenna/Tracker.cs
+++ b/Tools/ArdupilotMegaPlanner/Antenna/Tracker.cs
@@ -8,6 +8,7 @@ using System.Text;
 using System.Windows.Forms;
 using ArdupilotMega.Controls.BackstageView;
 using ArdupilotMega.Comms;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega.Antenna
 {
diff --git a/Tools/ArdupilotMegaPlanner/ArduCopterConfig.xml b/Tools/ArdupilotMegaPlanner/ArduCopterConfig.xml
index e90fae40cfe29cd13e042a768ec38068277fe659..2558e46e2c8022bcb52c9e741b1213e441e8bd02 100644
--- a/Tools/ArdupilotMegaPlanner/ArduCopterConfig.xml
+++ b/Tools/ArdupilotMegaPlanner/ArduCopterConfig.xml
@@ -56,14 +56,14 @@ When the sticks are fully deflected:
       <FIELD>
         <NAME>Dampen</NAME>
         <PARAMNAME>STAB_D</PARAMNAME>
-        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMIN>0</RANGEMIN>
         <RANGEMAX>5</RANGEMAX>
         <STEP>0.001</STEP>
       </FIELD>
       <FIELD>
         <NAME>Dynamic</NAME>
         <PARAMNAME>STAB_D_S</PARAMNAME>
-        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMIN>0</RANGEMIN>
         <RANGEMAX>1</RANGEMAX>
         <STEP>0.001</STEP>
       </FIELD>
@@ -201,5 +201,87 @@ A distance error of 100cm * P of .25 = 25 cm/s
         <STEP>0.1</STEP>
       </FIELD>
     </FIELDS>
+    <SUBHEAD>WP Speed:</SUBHEAD>
+    <DESC>
+      How fast the copter should move towards the target. A larger value means a faster return to center, but can cause the copter to oscillate around the target.
+
+      in m/s
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>Speed</NAME>
+        <PARAMNAME>WP_SPEED_MAX</PARAMNAME>
+        <RANGEMIN>1</RANGEMIN>
+        <RANGEMAX>30</RANGEMAX>
+        <STEP>1</STEP>
+      </FIELD>
+    </FIELDS>
+  </Item>
+  <!-- Alt Hold -->
+  <Item>
+    <HEAD>Altitude Hold:</HEAD>
+    <SUBHEAD>Altitude Error:</SUBHEAD>
+    <DESC>
+      How fast the copter should go to reach the correct altitude.
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>P</NAME>
+        <PARAMNAME>THR_ALT_P</PARAMNAME>
+        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>I</NAME>
+        <PARAMNAME>THR_ALT_I</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>IMAX</NAME>
+        <PARAMNAME>THR_ALT_IMAX</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>50</RANGEMAX>
+        <STEP>0.1</STEP>
+      </FIELD>
+    </FIELDS>
+    <SUBHEAD>Thrust Rate:</SUBHEAD>
+    <DESC>
+      How much thrust to give us the desired rate.
+      
+      This will change depending on the weight and thrust of your copter.
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>P</NAME>
+        <PARAMNAME>THR_RATE_P</PARAMNAME>
+        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>I</NAME>
+        <PARAMNAME>THR_RATE_I</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>D</NAME>
+        <PARAMNAME>THR_RATE_D</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>IMAX</NAME>
+        <PARAMNAME>THR_RATE_IMAX</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>50</RANGEMAX>
+        <STEP>0.1</STEP>
+      </FIELD>
+    </FIELDS>
   </Item>
 </AC>
diff --git a/Tools/ArdupilotMegaPlanner/Arduino/ArduinoDetect.cs b/Tools/ArdupilotMegaPlanner/Arduino/ArduinoDetect.cs
index 19c8bdea71180c9b64ed59af7d15f21b3d59c3de..b5a62da0d9982914082eb980fce08d8a9c22274d 100644
--- a/Tools/ArdupilotMegaPlanner/Arduino/ArduinoDetect.cs
+++ b/Tools/ArdupilotMegaPlanner/Arduino/ArduinoDetect.cs
@@ -6,6 +6,7 @@ using System.Threading;
 using log4net;
 using System.Globalization;
 using ArdupilotMega.Comms;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega.Arduino
 {
diff --git a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj
index b59c4d3ae9ec3e5d8b2bed08d3335bd05039bdb9..f9cfca5136a2e27fe8f292e89b886c0b2de78cb2 100644
--- a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj
+++ b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj
@@ -250,7 +250,7 @@
       <DependentUpon>ConnectionControl.cs</DependentUpon>
     </Compile>
     <Compile Include="Controls\ConfigPanel.cs">
-      <SubType>Form</SubType>
+      <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="Controls\ConfigPanel.Designer.cs">
       <DependentUpon>ConfigPanel.cs</DependentUpon>
@@ -322,12 +322,6 @@
     <Compile Include="GCSViews\ConfigurationView\ConfigTradHeli.Designer.cs">
       <DependentUpon>ConfigTradHeli.cs</DependentUpon>
     </Compile>
-    <Compile Include="GCSViews\ConfigurationView\Configuration.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="GCSViews\ConfigurationView\Configuration.Designer.cs">
-      <DependentUpon>Configuration.cs</DependentUpon>
-    </Compile>
     <Compile Include="GCSViews\ConfigurationView\ConfigRawParams.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -341,7 +335,7 @@
       <DependentUpon>ConfigAccelerometerCalibrationPlane.cs</DependentUpon>
     </Compile>
     <Compile Include="GCSViews\ConfigurationView\Setup.cs">
-      <SubType>Form</SubType>
+      <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="GCSViews\ConfigurationView\Setup.Designer.cs">
       <DependentUpon>Setup.cs</DependentUpon>
@@ -359,14 +353,14 @@
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="Arduino\ArduinoDetect.cs" />
-    <Compile Include="AviWriter.cs" />
+    <Compile Include="Utilities\AviWriter.cs" />
     <Compile Include="Camera.cs">
       <SubType>Form</SubType>
     </Compile>
     <Compile Include="Camera.Designer.cs">
       <DependentUpon>Camera.cs</DependentUpon>
     </Compile>
-    <Compile Include="Capture.cs" />
+    <Compile Include="Utilities\Capture.cs" />
     <Compile Include="Comms\CommsSerialInterface.cs" />
     <Compile Include="Comms\CommsSerialPort.cs">
       <SubType>Component</SubType>
@@ -409,7 +403,7 @@
     <Compile Include="HIL\QuadCopter.cs" />
     <Compile Include="HIL\Quaternion.cs" />
     <Compile Include="HIL\Vector3d.cs" />
-    <Compile Include="hires.cs" />
+    <Compile Include="Utilities\hires.cs" />
     <Compile Include="MavlinkLog.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -536,7 +530,7 @@
     <Compile Include="SerialOutput.Designer.cs">
       <DependentUpon>SerialOutput.cs</DependentUpon>
     </Compile>
-    <Compile Include="Speech.cs" />
+    <Compile Include="Utilities\Speech.cs" />
     <Compile Include="Splash.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -544,7 +538,7 @@
       <DependentUpon>Splash.cs</DependentUpon>
     </Compile>
     <Compile Include="srtm.cs" />
-    <Compile Include="TCPConsole.cs" />
+    <Compile Include="Utilities\TCPConsole.cs" />
     <Compile Include="temp.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -552,8 +546,8 @@
       <DependentUpon>temp.cs</DependentUpon>
     </Compile>
     <Compile Include="Radio\Uploader.cs" />
-    <Compile Include="LangUtility.cs" />
-    <Compile Include="ThemeManager.cs" />
+    <Compile Include="Utilities\LangUtility.cs" />
+    <Compile Include="Utilities\ThemeManager.cs" />
     <Compile Include="Utilities\EnumTranslator.cs" />
     <Compile Include="Utilities\ParameterMetaDataParser.cs" />
     <Compile Include="Utilities\ParameterMetaDataRepository.cs" />
@@ -685,7 +679,6 @@
     </EmbeddedResource>
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigRadioInput.resx">
       <DependentUpon>ConfigRadioInput.cs</DependentUpon>
-      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigRadioInput.zh-Hans.resx">
       <DependentUpon>ConfigRadioInput.cs</DependentUpon>
@@ -710,7 +703,6 @@
     </EmbeddedResource>
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigTradHeli.resx">
       <DependentUpon>ConfigTradHeli.cs</DependentUpon>
-      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigTradHeli.zh-Hans.resx">
       <DependentUpon>ConfigTradHeli.cs</DependentUpon>
@@ -718,9 +710,6 @@
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigTradHeli.zh-TW.resx">
       <DependentUpon>ConfigTradHeli.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="GCSViews\ConfigurationView\Configuration.resx">
-      <DependentUpon>Configuration.cs</DependentUpon>
-    </EmbeddedResource>
     <EmbeddedResource Include="GCSViews\ConfigurationView\ConfigAccelerometerCalibrationPlane.es-ES.resx">
       <DependentUpon>ConfigAccelerometerCalibrationPlane.cs</DependentUpon>
     </EmbeddedResource>
@@ -1085,9 +1074,7 @@
     <None Include="AeroSimRCAPMHil.zip">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
-    <None Include="app.config">
-      <SubType>Designer</SubType>
-    </None>
+    <None Include="app.config" />
     <None Include="arducopter-xplane.zip">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
diff --git a/Tools/ArdupilotMegaPlanner/Common.cs b/Tools/ArdupilotMegaPlanner/Common.cs
index 30b539568839bc621d7edd7e255ef64635fa3c3b..a6e13ee17dea5db13a28ee8232e42b50b5ba3ce0 100644
--- a/Tools/ArdupilotMegaPlanner/Common.cs
+++ b/Tools/ArdupilotMegaPlanner/Common.cs
@@ -125,6 +125,8 @@ namespace ArdupilotMega
             Matrix temp = g.Transform;
             g.TranslateTransform(LocalPosition.X, LocalPosition.Y);
 
+            g.RotateTransform(-MainMap.Bearing);
+
             int length = 500;
 // anti NaN
             try
@@ -445,7 +447,7 @@ namespace ArdupilotMega
             // altitude controller
             CH6_THR_HOLD_KP = 14,
             CH6_Z_GAIN = 15,
-            //CH6_DAMP = 16,
+            CH6_DAMP = 16,
 
             // optical flow controller
             CH6_OPTFLOW_KP = 17,
@@ -511,7 +513,7 @@ namespace ArdupilotMega
             {
                 if (Common.getModes() == typeof(Common.apmmodes))
                 {
-                    switch ((int)Enum.Parse(Common.getModes(), modein))
+                    switch (EnumTranslator.GetValue<Common.apmmodes>(modein))
                     {
                         case (int)Common.apmmodes.MANUAL:
                         case (int)Common.apmmodes.CIRCLE:
@@ -525,13 +527,13 @@ namespace ArdupilotMega
                             mode.custom_mode = (uint)(int)Enum.Parse(Common.getModes(), modein);
                             break;
                         default:
-                            MessageBox.Show("No Mode Changed " + (int)Enum.Parse(Common.getModes(), modein));
+                            MessageBox.Show("No Mode Changed " +  modein);
                             return false;
                     }
                 }
                 else if (Common.getModes() == typeof(Common.ac2modes))
                 {
-                    switch ((int)Enum.Parse(Common.getModes(), modein))
+                    switch (EnumTranslator.GetValue<Common.ac2modes>(modein))
                     {
                         case (int)Common.ac2modes.STABILIZE:
                         case (int)Common.ac2modes.AUTO:
@@ -545,7 +547,7 @@ namespace ArdupilotMega
                             mode.custom_mode = (uint)(int)Enum.Parse(Common.getModes(), modein);
                             break;
                         default:
-                            MessageBox.Show("No Mode Changed " + (int)Enum.Parse(Common.getModes(), modein));
+                            MessageBox.Show("No Mode Changed " +  modein);
                             return false;
                     }
                 }
@@ -555,7 +557,7 @@ namespace ArdupilotMega
             return true;
         }
 		
-		#else
+#else
         public static bool translateMode(string modein, ref  MAVLink.mavlink_set_nav_mode_t navmode, ref MAVLink.mavlink_set_mode_t mode)
         {
 
@@ -570,7 +572,7 @@ namespace ArdupilotMega
             {
                 if (Common.getModes() == typeof(Common.apmmodes))
                 {
-                    switch ((int)Enum.Parse(Common.getModes(), modein))
+                    switch (EnumTranslator.GetValue<Common.apmmodes>(modein))
                     {
                         case (int)Common.apmmodes.MANUAL:
                             mode.mode = (byte)MAVLink.MAV_MODE.MAV_MODE_MANUAL;
@@ -604,13 +606,13 @@ namespace ArdupilotMega
                             mode.mode = (byte)MAVLink.MAV_MODE.MAV_MODE_TEST2;
                             break;
                         default:
-                            CustomMessageBox.Show("No Mode Changed " + (int)Enum.Parse(Common.getModes(), modein));
+                            CustomMessageBox.Show("No Mode Changed " + modein);
                             return false;
                     }
                 }
                 else if (Common.getModes() == typeof(Common.ac2modes))
                 {
-                    switch ((int)Enum.Parse(Common.getModes(), modein))
+                    switch (EnumTranslator.GetValue<Common.ac2modes>(modein))
                     {
                         case (int)Common.ac2modes.GUIDED:
                             mode.mode = (byte)MAVLink.MAV_MODE.MAV_MODE_GUIDED;
@@ -632,7 +634,7 @@ namespace ArdupilotMega
                             mode.mode = (byte)MAVLink.MAV_MODE.MAV_MODE_AUTO;
                             break;
                         default:
-                            CustomMessageBox.Show("No Mode Changed " + (int)Enum.Parse(Common.getModes(), modein));
+                            CustomMessageBox.Show("No Mode Changed " +  modein);
                             return false;
                     }
                 }
@@ -697,7 +699,7 @@ namespace ArdupilotMega
             }
             catch (Exception ex) { log.Info("getFilefromNet(): " + ex.ToString()); return false; }
         }
-
+        
         public static Type getModes()
         {
             if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane)
diff --git a/Tools/ArdupilotMegaPlanner/Comms/CommsUdpSerial.cs b/Tools/ArdupilotMegaPlanner/Comms/CommsUdpSerial.cs
index d569cad89fec10eab94f11b41ac08b64f754188b..8aa8bd72c1777b2cdd00f28bac33b8b7dd2b4e06 100644
--- a/Tools/ArdupilotMegaPlanner/Comms/CommsUdpSerial.cs
+++ b/Tools/ArdupilotMegaPlanner/Comms/CommsUdpSerial.cs
@@ -91,7 +91,7 @@ namespace ArdupilotMega.Comms
 
             frmProgressReporter.UpdateProgressAndStatus(-1, "Connecting Mavlink UDP");
 
-            ArdupilotMega.ThemeManager.ApplyThemeTo(frmProgressReporter);
+            ArdupilotMega.Utilities.ThemeManager.ApplyThemeTo(frmProgressReporter);
 
             frmProgressReporter.RunBackgroundOperationAsync();
 
diff --git a/Tools/ArdupilotMegaPlanner/Controls/ConfigPanel.cs b/Tools/ArdupilotMegaPlanner/Controls/ConfigPanel.cs
index 26ab3db6c24fa8f55341096fc205fa7354995b15..539183f9bb5234da0e7c879167c4faac16efe945 100644
--- a/Tools/ArdupilotMegaPlanner/Controls/ConfigPanel.cs
+++ b/Tools/ArdupilotMegaPlanner/Controls/ConfigPanel.cs
@@ -8,10 +8,12 @@ using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.Xml;
+using ArdupilotMega.Controls.BackstageView;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega.Controls
 {
-    public partial class ConfigPanel : Form
+    public partial class ConfigPanel : BackStageViewContentPanel
     {
         /// <summary>
         /// store tempory pending changes
diff --git a/Tools/ArdupilotMegaPlanner/Controls/CustomMessageBox.cs b/Tools/ArdupilotMegaPlanner/Controls/CustomMessageBox.cs
index 2326987b33ee649317a988714bcb527a2161a014..de5e9592a540fe49a13e10943d7f2b3e8f572536 100644
--- a/Tools/ArdupilotMegaPlanner/Controls/CustomMessageBox.cs
+++ b/Tools/ArdupilotMegaPlanner/Controls/CustomMessageBox.cs
@@ -4,6 +4,7 @@ using System.Windows.Forms;
 //using ArdupilotMega.Controls;
 using System.Text;
 using ArdupilotMega;
+using ArdupilotMega.Utilities;
 
 namespace System.Windows.Forms
 {
diff --git a/Tools/ArdupilotMegaPlanner/Controls/MyUserControl.cs b/Tools/ArdupilotMegaPlanner/Controls/MyUserControl.cs
index 58260f138be2b86002eeb8b145baebc6daef2efa..5903f7d2d8ec628c2ede7d7aea2b955583352140 100644
--- a/Tools/ArdupilotMegaPlanner/Controls/MyUserControl.cs
+++ b/Tools/ArdupilotMegaPlanner/Controls/MyUserControl.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Windows.Forms;
 
 namespace System.Windows.Forms
 {
@@ -10,6 +11,19 @@ namespace System.Windows.Forms
     /// </summary>
     public class MyUserControl : System.Windows.Forms.UserControl
     {
+        public event FormClosingEventHandler FormClosing;
+
+        public void Close(object sender, FormClosingEventArgs e)
+        {
+            if (FormClosing != null)
+                FormClosing(sender,e);
+        }
+
+        public void Close()
+        {
+            Close(this, new FormClosingEventArgs(CloseReason.UserClosing, false));
+        }
+
         protected override void WndProc(ref Message m)
         {
             try
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs b/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs
index 6d3ff562e174c6fd0a6f7277c167fefcdfc9dd37..261c001f3b512d7b18ae22b401e08b9a1ae176e1 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs
@@ -14,6 +14,8 @@ using System.Threading;
 using DirectShowLib;
 using System.Runtime.InteropServices;
 using ArdupilotMega.Controls;
+using ArdupilotMega.Utilities;
+using System.Linq;
 
 namespace ArdupilotMega.GCSViews
 {
@@ -97,8 +99,13 @@ namespace ArdupilotMega.GCSViews
                 readToolTips();
 
             // ensure the fields are populated before setting them
-            CH7_OPT.DataSource = Enum.GetNames(typeof(Common.ac2ch7modes));
-            TUNE.DataSource = Enum.GetNames(typeof(Common.ac2ch6modes));
+            CH7_OPT.DataSource = EnumTranslator.Translate<Common.ac2ch7modes>().ToList();
+            CH7_OPT.DisplayMember = "Value";
+            CH7_OPT.ValueMember = "Key";
+
+            TUNE.DataSource = EnumTranslator.Translate<Common.ac2ch6modes>().ToList();
+            TUNE.DisplayMember = "Value";
+            TUNE.ValueMember = "Key";
 
             // prefill all fields
             param = MainV2.comPort.param;
@@ -726,11 +733,17 @@ namespace ArdupilotMega.GCSViews
             if (ConfigTabs.SelectedTab == TabSetup)
             {
 
-                    GCSViews.ConfigurationView.Setup temp = new GCSViews.ConfigurationView.Setup();
-
-                    ThemeManager.ApplyThemeTo(temp);
-
-                    temp.ShowDialog();
+                Form temp = new Form();
+                MyUserControl configview = new GCSViews.ConfigurationView.Setup();
+                temp.Controls.Add(configview);
+                ThemeManager.ApplyThemeTo(temp);
+                // fix title
+                temp.Text = configview.Name;
+                // fix size
+                temp.Size = configview.Size;
+                configview.Dock = DockStyle.Fill;
+                temp.FormClosing += configview.Close;
+                temp.ShowDialog();
 
                     startup = true;
                     processToScreen();
@@ -999,7 +1012,6 @@ namespace ArdupilotMega.GCSViews
         }
 
 
-
         private void CMB_rateattitude_SelectedIndexChanged(object sender, EventArgs e)
         {
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
@@ -1010,18 +1022,21 @@ namespace ArdupilotMega.GCSViews
         {
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.rateposition = byte.Parse(((ComboBox)sender).Text);
+
         }
 
         private void CMB_ratestatus_SelectedIndexChanged(object sender, EventArgs e)
         {
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.ratestatus = byte.Parse(((ComboBox)sender).Text);
+
         }
 
         private void CMB_raterc_SelectedIndexChanged(object sender, EventArgs e)
         {
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.raterc = byte.Parse(((ComboBox)sender).Text);
+
         }
 
         private void CHK_mavdebug_CheckedChanged(object sender, EventArgs e)
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs
index ec5d7ca2cf8a0bf66fe9c671e75f14e1abbe437e..2b823b0fe08cdebd3d92a7cb18b87e747b9a6f6b 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs
@@ -126,6 +126,7 @@
             this.RATE_RLL_P = new System.Windows.Forms.NumericUpDown();
             this.label91 = new System.Windows.Forms.Label();
             this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.BUT_writePIDS = new ArdupilotMega.Controls.MyButton();
             ((System.ComponentModel.ISupportInitialize)(this.TUNE_LOW)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.TUNE_HIGH)).BeginInit();
             this.groupBox5.SuspendLayout();
@@ -785,10 +786,18 @@
             resources.ApplyResources(this.label91, "label91");
             this.label91.Name = "label91";
             // 
+            // BUT_writePIDS
+            // 
+            resources.ApplyResources(this.BUT_writePIDS, "BUT_writePIDS");
+            this.BUT_writePIDS.Name = "BUT_writePIDS";
+            this.BUT_writePIDS.UseVisualStyleBackColor = true;
+            this.BUT_writePIDS.Click += new System.EventHandler(this.BUT_writePIDS_Click);
+            // 
             // ConfigArducopter
             // 
             resources.ApplyResources(this, "$this");
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.BUT_writePIDS);
             this.Controls.Add(this.myLabel3);
             this.Controls.Add(this.TUNE_LOW);
             this.Controls.Add(this.TUNE_HIGH);
@@ -964,5 +973,6 @@
         private System.Windows.Forms.NumericUpDown RATE_RLL_P;
         private System.Windows.Forms.Label label91;
         private System.Windows.Forms.ToolTip toolTip1;
+        private Controls.MyButton BUT_writePIDS;
     }
 }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs
index ce263e44ccd961fd4500fa6ed884b98f380a1c8e..caf0c3b6a940005a8d605ba26a0be6430b312601 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs
@@ -63,8 +63,13 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
                 readToolTips();
 
             // ensure the fields are populated before setting them
-            CH7_OPT.DataSource = Enum.GetNames(typeof(Common.ac2ch7modes));
-            TUNE.DataSource = Enum.GetNames(typeof(Common.ac2ch6modes));
+            CH7_OPT.DataSource = Utilities.EnumTranslator.Translate<Common.ac2ch7modes>().ToList();
+            CH7_OPT.DisplayMember = "Value";
+            CH7_OPT.ValueMember = "Key";
+
+            TUNE.DataSource = Utilities.EnumTranslator.Translate<Common.ac2ch6modes>().ToList();
+            TUNE.DisplayMember = "Value";
+            TUNE.ValueMember = "Key";
 
             // prefill all fields
             processToScreen();
@@ -225,7 +230,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
 
                             ComboBox thisctl = ((ComboBox)ctl);
 
-                            thisctl.SelectedIndex = (int)(float)MainV2.comPort.param[value];
+                            thisctl.SelectedValue = (int)(float)MainV2.comPort.param[value];
 
                             thisctl.Validated += new EventHandler(ComboBox_Validated);
 
@@ -271,7 +276,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
                 }
                 else if (sender.GetType() == typeof(ComboBox))
                 {
-                    value = ((ComboBox)sender).SelectedIndex;
+                    value = (int)((ComboBox)sender).SelectedValue;
                     changes[name] = value;
                 }
                 ((Control)sender).BackColor = Color.Green;
@@ -344,6 +349,38 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
             }
             catch { }
         }
+
+        private void BUT_writePIDS_Click(object sender, EventArgs e)
+        {
+            var temp = (Hashtable)changes.Clone();
+
+            foreach (string value in temp.Keys)
+            {
+                try
+                {
+                    MainV2.comPort.setParam(value, (float)changes[value]);
+
+                    try
+                    {
+                        // set control as well
+                        var textControls = this.Controls.Find(value, true);
+                        if (textControls.Length > 0)
+                        {
+                            textControls[0].BackColor = Color.FromArgb(0x43, 0x44, 0x45);
+                        }
+                    }
+                    catch
+                    {
+
+                    }
+
+                }
+                catch
+                {
+                    CustomMessageBox.Show("Set " + value + " Failed");
+                }
+            }
+        }
       
         
     }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx
index c404907f7dc5b1aab79b897794cef8b67a6419cd..79660de1410bbeb9ee883ef89c7f853431dd0724 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx
@@ -135,13 +135,13 @@
     <value>myLabel3</value>
   </data>
   <data name="&gt;&gt;myLabel3.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;myLabel3.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;myLabel3.ZOrder" xml:space="preserve">
-    <value>0</value>
+    <value>1</value>
   </data>
   <data name="TUNE_LOW.Location" type="System.Drawing.Point, System.Drawing">
     <value>575, 305</value>
@@ -162,7 +162,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;TUNE_LOW.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>2</value>
   </data>
   <data name="TUNE_HIGH.Location" type="System.Drawing.Point, System.Drawing">
     <value>665, 305</value>
@@ -183,7 +183,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;TUNE_HIGH.ZOrder" xml:space="preserve">
-    <value>2</value>
+    <value>3</value>
   </data>
   <data name="myLabel2.Location" type="System.Drawing.Point, System.Drawing">
     <value>540, 277</value>
@@ -201,13 +201,13 @@
     <value>myLabel2</value>
   </data>
   <data name="&gt;&gt;myLabel2.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;myLabel2.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;myLabel2.ZOrder" xml:space="preserve">
-    <value>3</value>
+    <value>4</value>
   </data>
   <data name="TUNE.Items" xml:space="preserve">
     <value>CH6_NONE</value>
@@ -294,7 +294,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;TUNE.ZOrder" xml:space="preserve">
-    <value>4</value>
+    <value>5</value>
   </data>
   <data name="myLabel1.Location" type="System.Drawing.Point, System.Drawing">
     <value>540, 329</value>
@@ -312,13 +312,13 @@
     <value>myLabel1</value>
   </data>
   <data name="&gt;&gt;myLabel1.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;myLabel1.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;myLabel1.ZOrder" xml:space="preserve">
-    <value>5</value>
+    <value>6</value>
   </data>
   <data name="CH7_OPT.Items" xml:space="preserve">
     <value>Do Nothing</value>
@@ -363,7 +363,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CH7_OPT.ZOrder" xml:space="preserve">
-    <value>6</value>
+    <value>7</value>
   </data>
   <data name="THR_RATE_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 60</value>
@@ -580,7 +580,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox5.ZOrder" xml:space="preserve">
-    <value>7</value>
+    <value>8</value>
   </data>
   <data name="CHK_lockrollpitch.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
@@ -610,7 +610,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_lockrollpitch.ZOrder" xml:space="preserve">
-    <value>8</value>
+    <value>9</value>
   </data>
   <data name="NAV_LAT_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 60</value>
@@ -874,7 +874,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox4.ZOrder" xml:space="preserve">
-    <value>9</value>
+    <value>10</value>
   </data>
   <data name="XTRK_GAIN_SC1.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 13</value>
@@ -946,7 +946,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox6.ZOrder" xml:space="preserve">
-    <value>10</value>
+    <value>11</value>
   </data>
   <data name="THR_ALT_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 63</value>
@@ -1114,7 +1114,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox7.ZOrder" xml:space="preserve">
-    <value>11</value>
+    <value>12</value>
   </data>
   <data name="HLD_LAT_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 61</value>
@@ -1282,7 +1282,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox19.ZOrder" xml:space="preserve">
-    <value>12</value>
+    <value>13</value>
   </data>
   <data name="STB_YAW_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 63</value>
@@ -1450,7 +1450,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox20.ZOrder" xml:space="preserve">
-    <value>13</value>
+    <value>14</value>
   </data>
   <data name="STAB_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 88</value>
@@ -1666,7 +1666,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox21.ZOrder" xml:space="preserve">
-    <value>14</value>
+    <value>15</value>
   </data>
   <data name="STB_RLL_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 63</value>
@@ -1834,7 +1834,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox22.ZOrder" xml:space="preserve">
-    <value>15</value>
+    <value>16</value>
   </data>
   <data name="RATE_YAW_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 60</value>
@@ -2050,7 +2050,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox23.ZOrder" xml:space="preserve">
-    <value>16</value>
+    <value>17</value>
   </data>
   <data name="RATE_PIT_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 60</value>
@@ -2266,7 +2266,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox24.ZOrder" xml:space="preserve">
-    <value>17</value>
+    <value>18</value>
   </data>
   <data name="RATE_RLL_D.Location" type="System.Drawing.Point, System.Drawing">
     <value>80, 60</value>
@@ -2482,11 +2482,41 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;groupBox25.ZOrder" xml:space="preserve">
-    <value>18</value>
+    <value>19</value>
   </data>
   <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
+  <data name="BUT_writePIDS.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="BUT_writePIDS.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="BUT_writePIDS.Location" type="System.Drawing.Point, System.Drawing">
+    <value>305, 383</value>
+  </data>
+  <data name="BUT_writePIDS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 19</value>
+  </data>
+  <data name="BUT_writePIDS.TabIndex" type="System.Int32, mscorlib">
+    <value>70</value>
+  </data>
+  <data name="BUT_writePIDS.Text" xml:space="preserve">
+    <value>Write Params</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.Name" xml:space="preserve">
+    <value>BUT_writePIDS</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.Type" xml:space="preserve">
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -2509,6 +2539,6 @@
     <value>ConfigArducopter</value>
   </data>
   <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs
index 90e96df593517b13f8ad05d385b480cf8ccc9f95..9712d788f33a8ba4e98758d5bc93af0ec6f849ff 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs
@@ -131,6 +131,7 @@
             this.RLL2SRV_P = new System.Windows.Forms.NumericUpDown();
             this.label52 = new System.Windows.Forms.Label();
             this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.BUT_writePIDS = new ArdupilotMega.Controls.MyButton();
             this.groupBox3.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.THR_FS_VALUE)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.THR_MAX)).BeginInit();
@@ -789,10 +790,18 @@
             resources.ApplyResources(this.label52, "label52");
             this.label52.Name = "label52";
             // 
+            // BUT_writePIDS
+            // 
+            resources.ApplyResources(this.BUT_writePIDS, "BUT_writePIDS");
+            this.BUT_writePIDS.Name = "BUT_writePIDS";
+            this.BUT_writePIDS.UseVisualStyleBackColor = true;
+            this.BUT_writePIDS.Click += new System.EventHandler(this.BUT_writePIDS_Click);
+            // 
             // ConfigArduplane
             // 
             resources.ApplyResources(this, "$this");
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.BUT_writePIDS);
             this.Controls.Add(this.groupBox3);
             this.Controls.Add(this.groupBox1);
             this.Controls.Add(this.groupBox2);
@@ -970,5 +979,6 @@
         private System.Windows.Forms.NumericUpDown RLL2SRV_P;
         private System.Windows.Forms.Label label52;
         private System.Windows.Forms.ToolTip toolTip1;
+        private Controls.MyButton BUT_writePIDS;
     }
 }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs
index 11bbb4fb8e4bff14e627a966f14e1ab6ec98c7c8..8b50355a3cbcef8bd0a0d3cc4e2fd75bae10203b 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs
@@ -268,5 +268,37 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
             }         
         }
 
+        private void BUT_writePIDS_Click(object sender, EventArgs e)
+        {
+            var temp = (Hashtable)changes.Clone();
+
+            foreach (string value in temp.Keys)
+            {
+                try
+                {
+                    MainV2.comPort.setParam(value, (float)changes[value]);
+
+                    try
+                    {
+                        // set control as well
+                        var textControls = this.Controls.Find(value, true);
+                        if (textControls.Length > 0)
+                        {
+                            textControls[0].BackColor = Color.FromArgb(0x43, 0x44, 0x45);
+                        }
+                    }
+                    catch
+                    {
+
+                    }
+
+                }
+                catch
+                {
+                    CustomMessageBox.Show("Set " + value + " Failed");
+                }
+            }
+        }
+
     }
 }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx
index e78598b5a3bd4285e96173b88a0969f0d4e33b3e..771898ca2c62d90537a518b06e498cb1b487433a 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx
@@ -117,14 +117,134 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <data name="&gt;&gt;THR_FS_VALUE.Name" xml:space="preserve">
+    <value>THR_FS_VALUE</value>
+  </data>
+  <data name="&gt;&gt;THR_FS_VALUE.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;THR_FS_VALUE.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;THR_FS_VALUE.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label5.Name" xml:space="preserve">
+    <value>label5</value>
+  </data>
+  <data name="&gt;&gt;label5.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label5.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;THR_MAX.Name" xml:space="preserve">
+    <value>THR_MAX</value>
+  </data>
+  <data name="&gt;&gt;THR_MAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;THR_MAX.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;THR_MAX.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label6.Name" xml:space="preserve">
+    <value>label6</value>
+  </data>
+  <data name="&gt;&gt;label6.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label6.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;THR_MIN.Name" xml:space="preserve">
+    <value>THR_MIN</value>
+  </data>
+  <data name="&gt;&gt;THR_MIN.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;THR_MIN.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;THR_MIN.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label7.Name" xml:space="preserve">
+    <value>label7</value>
+  </data>
+  <data name="&gt;&gt;label7.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label7.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;TRIM_THROTTLE.Name" xml:space="preserve">
+    <value>TRIM_THROTTLE</value>
+  </data>
+  <data name="&gt;&gt;TRIM_THROTTLE.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;TRIM_THROTTLE.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;TRIM_THROTTLE.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label8.Name" xml:space="preserve">
+    <value>label8</value>
+  </data>
+  <data name="&gt;&gt;label8.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label8.Parent" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;label8.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>413, 231</value>
+  </data>
+  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>195, 108</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
+    <value>12</value>
+  </data>
+  <data name="groupBox3.Text" xml:space="preserve">
+    <value>Throttle 0-100%</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Name" xml:space="preserve">
+    <value>groupBox3</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
   <data name="THR_FS_VALUE.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
   </data>
   <data name="THR_FS_VALUE.Size" type="System.Drawing.Size, System.Drawing">
     <value>78, 20</value>
   </data>
-  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="THR_FS_VALUE.TabIndex" type="System.Int32, mscorlib">
     <value>11</value>
   </data>
@@ -312,29 +432,125 @@
   <data name="&gt;&gt;label8.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>413, 231</value>
+  <data name="&gt;&gt;ARSPD_RATIO.Name" xml:space="preserve">
+    <value>ARSPD_RATIO</value>
   </data>
-  <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;ARSPD_RATIO.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_RATIO.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_RATIO.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MAX.Name" xml:space="preserve">
+    <value>ARSPD_FBW_MAX</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MAX.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MAX.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MIN.Name" xml:space="preserve">
+    <value>ARSPD_FBW_MIN</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MIN.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MIN.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;ARSPD_FBW_MIN.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label3.Name" xml:space="preserve">
+    <value>label3</value>
+  </data>
+  <data name="&gt;&gt;label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;TRIM_ARSPD_CM.Name" xml:space="preserve">
+    <value>TRIM_ARSPD_CM</value>
+  </data>
+  <data name="&gt;&gt;TRIM_ARSPD_CM.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;TRIM_ARSPD_CM.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;TRIM_ARSPD_CM.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label4.Name" xml:space="preserve">
+    <value>label4</value>
+  </data>
+  <data name="&gt;&gt;label4.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>414, 339</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox3.TabIndex" type="System.Int32, mscorlib">
-    <value>12</value>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>13</value>
   </data>
-  <data name="groupBox3.Text" xml:space="preserve">
-    <value>Throttle 0-100%</value>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Airspeed m/s</value>
   </data>
-  <data name="&gt;&gt;groupBox3.Name" xml:space="preserve">
-    <value>groupBox3</value>
+  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name="&gt;&gt;groupBox3.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox3.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox3.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
   <data name="ARSPD_RATIO.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -528,29 +744,101 @@
   <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>414, 339</value>
+  <data name="&gt;&gt;LIM_PITCH_MIN.Name" xml:space="preserve">
+    <value>LIM_PITCH_MIN</value>
   </data>
-  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>195, 108</value>
+  <data name="&gt;&gt;LIM_PITCH_MIN.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>13</value>
+  <data name="&gt;&gt;LIM_PITCH_MIN.Parent" xml:space="preserve">
+    <value>groupBox2</value>
   </data>
-  <data name="groupBox1.Text" xml:space="preserve">
-    <value>Airspeed m/s</value>
+  <data name="&gt;&gt;LIM_PITCH_MIN.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
-    <value>groupBox1</value>
+  <data name="&gt;&gt;label39.Name" xml:space="preserve">
+    <value>label39</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
+  <data name="&gt;&gt;label39.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label39.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;label39.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;LIM_PITCH_MAX.Name" xml:space="preserve">
+    <value>LIM_PITCH_MAX</value>
+  </data>
+  <data name="&gt;&gt;LIM_PITCH_MAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;LIM_PITCH_MAX.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;LIM_PITCH_MAX.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label38.Name" xml:space="preserve">
+    <value>label38</value>
+  </data>
+  <data name="&gt;&gt;label38.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label38.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;label38.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;LIM_ROLL_CD.Name" xml:space="preserve">
+    <value>LIM_ROLL_CD</value>
+  </data>
+  <data name="&gt;&gt;LIM_ROLL_CD.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;LIM_ROLL_CD.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;LIM_ROLL_CD.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label37.Name" xml:space="preserve">
+    <value>label37</value>
+  </data>
+  <data name="&gt;&gt;label37.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label37.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;label37.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>213, 339</value>
+  </data>
+  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>195, 108</value>
+  </data>
+  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="groupBox2.Text" xml:space="preserve">
+    <value>Navigation Angles</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Name" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
-    <value>1</value>
+  <data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
   <data name="LIM_PITCH_MIN.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 59</value>
@@ -696,29 +984,77 @@
   <data name="&gt;&gt;label37.ZOrder" xml:space="preserve">
     <value>5</value>
   </data>
-  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>213, 339</value>
+  <data name="&gt;&gt;XTRK_ANGLE_CD.Name" xml:space="preserve">
+    <value>XTRK_ANGLE_CD</value>
   </data>
-  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;XTRK_ANGLE_CD.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;XTRK_ANGLE_CD.Parent" xml:space="preserve">
+    <value>groupBox15</value>
+  </data>
+  <data name="&gt;&gt;XTRK_ANGLE_CD.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label79.Name" xml:space="preserve">
+    <value>label79</value>
+  </data>
+  <data name="&gt;&gt;label79.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label79.Parent" xml:space="preserve">
+    <value>groupBox15</value>
+  </data>
+  <data name="&gt;&gt;label79.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;XTRK_GAIN_SC.Name" xml:space="preserve">
+    <value>XTRK_GAIN_SC</value>
+  </data>
+  <data name="&gt;&gt;XTRK_GAIN_SC.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;XTRK_GAIN_SC.Parent" xml:space="preserve">
+    <value>groupBox15</value>
+  </data>
+  <data name="&gt;&gt;XTRK_GAIN_SC.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label80.Name" xml:space="preserve">
+    <value>label80</value>
+  </data>
+  <data name="&gt;&gt;label80.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label80.Parent" xml:space="preserve">
+    <value>groupBox15</value>
+  </data>
+  <data name="&gt;&gt;label80.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="groupBox15.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 339</value>
+  </data>
+  <data name="groupBox15.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
-    <value>14</value>
+  <data name="groupBox15.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
   </data>
-  <data name="groupBox2.Text" xml:space="preserve">
-    <value>Navigation Angles</value>
+  <data name="groupBox15.Text" xml:space="preserve">
+    <value>Xtrack Pids</value>
   </data>
-  <data name="&gt;&gt;groupBox2.Name" xml:space="preserve">
-    <value>groupBox2</value>
+  <data name="&gt;&gt;groupBox15.Name" xml:space="preserve">
+    <value>groupBox15</value>
   </data>
-  <data name="&gt;&gt;groupBox2.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox15.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox2.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox15.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox2.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="&gt;&gt;groupBox15.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
   <data name="XTRK_ANGLE_CD.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 36</value>
@@ -816,29 +1152,101 @@
   <data name="&gt;&gt;label80.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="groupBox15.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 339</value>
+  <data name="&gt;&gt;KFF_PTCH2THR.Name" xml:space="preserve">
+    <value>KFF_PTCH2THR</value>
   </data>
-  <data name="groupBox15.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;KFF_PTCH2THR.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCH2THR.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCH2THR.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label83.Name" xml:space="preserve">
+    <value>label83</value>
+  </data>
+  <data name="&gt;&gt;label83.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label83.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;label83.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;KFF_RDDRMIX.Name" xml:space="preserve">
+    <value>KFF_RDDRMIX</value>
+  </data>
+  <data name="&gt;&gt;KFF_RDDRMIX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;KFF_RDDRMIX.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;KFF_RDDRMIX.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label78.Name" xml:space="preserve">
+    <value>label78</value>
+  </data>
+  <data name="&gt;&gt;label78.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label78.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;label78.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCHCOMP.Name" xml:space="preserve">
+    <value>KFF_PTCHCOMP</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCHCOMP.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCHCOMP.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;KFF_PTCHCOMP.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label81.Name" xml:space="preserve">
+    <value>label81</value>
+  </data>
+  <data name="&gt;&gt;label81.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label81.Parent" xml:space="preserve">
+    <value>groupBox16</value>
+  </data>
+  <data name="&gt;&gt;label81.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="groupBox16.Location" type="System.Drawing.Point, System.Drawing">
+    <value>213, 231</value>
+  </data>
+  <data name="groupBox16.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox15.TabIndex" type="System.Int32, mscorlib">
-    <value>15</value>
+  <data name="groupBox16.TabIndex" type="System.Int32, mscorlib">
+    <value>16</value>
   </data>
-  <data name="groupBox15.Text" xml:space="preserve">
-    <value>Xtrack Pids</value>
+  <data name="groupBox16.Text" xml:space="preserve">
+    <value>Other Mix's</value>
   </data>
-  <data name="&gt;&gt;groupBox15.Name" xml:space="preserve">
-    <value>groupBox15</value>
+  <data name="&gt;&gt;groupBox16.Name" xml:space="preserve">
+    <value>groupBox16</value>
   </data>
-  <data name="&gt;&gt;groupBox15.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox16.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox15.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox16.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox15.ZOrder" xml:space="preserve">
-    <value>3</value>
+  <data name="&gt;&gt;groupBox16.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
   <data name="KFF_PTCH2THR.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 13</value>
@@ -984,29 +1392,125 @@
   <data name="&gt;&gt;label81.ZOrder" xml:space="preserve">
     <value>5</value>
   </data>
-  <data name="groupBox16.Location" type="System.Drawing.Point, System.Drawing">
-    <value>213, 231</value>
+  <data name="&gt;&gt;ENRGY2THR_IMAX.Name" xml:space="preserve">
+    <value>ENRGY2THR_IMAX</value>
   </data>
-  <data name="groupBox16.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;ENRGY2THR_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_IMAX.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label73.Name" xml:space="preserve">
+    <value>label73</value>
+  </data>
+  <data name="&gt;&gt;label73.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label73.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;label73.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_D.Name" xml:space="preserve">
+    <value>ENRGY2THR_D</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_D.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label74.Name" xml:space="preserve">
+    <value>label74</value>
+  </data>
+  <data name="&gt;&gt;label74.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label74.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;label74.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_I.Name" xml:space="preserve">
+    <value>ENRGY2THR_I</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_I.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label75.Name" xml:space="preserve">
+    <value>label75</value>
+  </data>
+  <data name="&gt;&gt;label75.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label75.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;label75.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_P.Name" xml:space="preserve">
+    <value>ENRGY2THR_P</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_P.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;ENRGY2THR_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label76.Name" xml:space="preserve">
+    <value>label76</value>
+  </data>
+  <data name="&gt;&gt;label76.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label76.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;label76.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="groupBox14.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 231</value>
+  </data>
+  <data name="groupBox14.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox16.TabIndex" type="System.Int32, mscorlib">
-    <value>16</value>
+  <data name="groupBox14.TabIndex" type="System.Int32, mscorlib">
+    <value>17</value>
   </data>
-  <data name="groupBox16.Text" xml:space="preserve">
-    <value>Other Mix's</value>
+  <data name="groupBox14.Text" xml:space="preserve">
+    <value>Energy/Alt Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox16.Name" xml:space="preserve">
-    <value>groupBox16</value>
+  <data name="&gt;&gt;groupBox14.Name" xml:space="preserve">
+    <value>groupBox14</value>
   </data>
-  <data name="&gt;&gt;groupBox16.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox14.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox16.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox14.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox16.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name="&gt;&gt;groupBox14.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
   <data name="ENRGY2THR_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -1188,41 +1692,137 @@
   <data name="label76.Text" xml:space="preserve">
     <value>P</value>
   </data>
-  <data name="&gt;&gt;label76.Name" xml:space="preserve">
-    <value>label76</value>
+  <data name="&gt;&gt;label76.Name" xml:space="preserve">
+    <value>label76</value>
+  </data>
+  <data name="&gt;&gt;label76.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label76.Parent" xml:space="preserve">
+    <value>groupBox14</value>
+  </data>
+  <data name="&gt;&gt;label76.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_IMAX.Name" xml:space="preserve">
+    <value>ALT2PTCH_IMAX</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_IMAX.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label69.Name" xml:space="preserve">
+    <value>label69</value>
+  </data>
+  <data name="&gt;&gt;label69.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label69.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;label69.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_D.Name" xml:space="preserve">
+    <value>ALT2PTCH_D</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_D.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label70.Name" xml:space="preserve">
+    <value>label70</value>
+  </data>
+  <data name="&gt;&gt;label70.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label70.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;label70.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_I.Name" xml:space="preserve">
+    <value>ALT2PTCH_I</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_I.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label71.Name" xml:space="preserve">
+    <value>label71</value>
+  </data>
+  <data name="&gt;&gt;label71.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label71.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;label71.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_P.Name" xml:space="preserve">
+    <value>ALT2PTCH_P</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_P.Parent" xml:space="preserve">
+    <value>groupBox13</value>
+  </data>
+  <data name="&gt;&gt;ALT2PTCH_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label72.Name" xml:space="preserve">
+    <value>label72</value>
   </data>
-  <data name="&gt;&gt;label76.Type" xml:space="preserve">
+  <data name="&gt;&gt;label72.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;label76.Parent" xml:space="preserve">
-    <value>groupBox14</value>
+  <data name="&gt;&gt;label72.Parent" xml:space="preserve">
+    <value>groupBox13</value>
   </data>
-  <data name="&gt;&gt;label76.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;label72.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox14.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 231</value>
+  <data name="groupBox13.Location" type="System.Drawing.Point, System.Drawing">
+    <value>414, 123</value>
   </data>
-  <data name="groupBox14.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="groupBox13.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox14.TabIndex" type="System.Int32, mscorlib">
-    <value>17</value>
+  <data name="groupBox13.TabIndex" type="System.Int32, mscorlib">
+    <value>18</value>
   </data>
-  <data name="groupBox14.Text" xml:space="preserve">
-    <value>Energy/Alt Pid</value>
+  <data name="groupBox13.Text" xml:space="preserve">
+    <value>Nav Pitch Alt Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox14.Name" xml:space="preserve">
-    <value>groupBox14</value>
+  <data name="&gt;&gt;groupBox13.Name" xml:space="preserve">
+    <value>groupBox13</value>
   </data>
-  <data name="&gt;&gt;groupBox14.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox13.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox14.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox13.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox14.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;groupBox13.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
   <data name="ALT2PTCH_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -1416,29 +2016,125 @@
   <data name="&gt;&gt;label72.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox13.Location" type="System.Drawing.Point, System.Drawing">
-    <value>414, 123</value>
+  <data name="&gt;&gt;ARSP2PTCH_IMAX.Name" xml:space="preserve">
+    <value>ARSP2PTCH_IMAX</value>
   </data>
-  <data name="groupBox13.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;ARSP2PTCH_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_IMAX.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label65.Name" xml:space="preserve">
+    <value>label65</value>
+  </data>
+  <data name="&gt;&gt;label65.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label65.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;label65.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_D.Name" xml:space="preserve">
+    <value>ARSP2PTCH_D</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_D.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label66.Name" xml:space="preserve">
+    <value>label66</value>
+  </data>
+  <data name="&gt;&gt;label66.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label66.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;label66.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_I.Name" xml:space="preserve">
+    <value>ARSP2PTCH_I</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_I.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label67.Name" xml:space="preserve">
+    <value>label67</value>
+  </data>
+  <data name="&gt;&gt;label67.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label67.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;label67.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_P.Name" xml:space="preserve">
+    <value>ARSP2PTCH_P</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_P.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;ARSP2PTCH_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label68.Name" xml:space="preserve">
+    <value>label68</value>
+  </data>
+  <data name="&gt;&gt;label68.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label68.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;label68.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="groupBox12.Location" type="System.Drawing.Point, System.Drawing">
+    <value>213, 123</value>
+  </data>
+  <data name="groupBox12.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox13.TabIndex" type="System.Int32, mscorlib">
-    <value>18</value>
+  <data name="groupBox12.TabIndex" type="System.Int32, mscorlib">
+    <value>19</value>
   </data>
-  <data name="groupBox13.Text" xml:space="preserve">
-    <value>Nav Pitch Alt Pid</value>
+  <data name="groupBox12.Text" xml:space="preserve">
+    <value>Nav Pitch AS Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox13.Name" xml:space="preserve">
-    <value>groupBox13</value>
+  <data name="&gt;&gt;groupBox12.Name" xml:space="preserve">
+    <value>groupBox12</value>
   </data>
-  <data name="&gt;&gt;groupBox13.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox12.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox13.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox12.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox13.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name="&gt;&gt;groupBox12.ZOrder" xml:space="preserve">
+    <value>8</value>
   </data>
   <data name="ARSP2PTCH_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -1620,41 +2316,137 @@
   <data name="label68.Text" xml:space="preserve">
     <value>P</value>
   </data>
-  <data name="&gt;&gt;label68.Name" xml:space="preserve">
-    <value>label68</value>
+  <data name="&gt;&gt;label68.Name" xml:space="preserve">
+    <value>label68</value>
+  </data>
+  <data name="&gt;&gt;label68.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label68.Parent" xml:space="preserve">
+    <value>groupBox12</value>
+  </data>
+  <data name="&gt;&gt;label68.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_IMAX.Name" xml:space="preserve">
+    <value>HDNG2RLL_IMAX</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_IMAX.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label61.Name" xml:space="preserve">
+    <value>label61</value>
+  </data>
+  <data name="&gt;&gt;label61.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label61.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;label61.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_D.Name" xml:space="preserve">
+    <value>HDNG2RLL_D</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_D.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label62.Name" xml:space="preserve">
+    <value>label62</value>
+  </data>
+  <data name="&gt;&gt;label62.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label62.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;label62.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_I.Name" xml:space="preserve">
+    <value>HDNG2RLL_I</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_I.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label63.Name" xml:space="preserve">
+    <value>label63</value>
+  </data>
+  <data name="&gt;&gt;label63.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label63.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;label63.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_P.Name" xml:space="preserve">
+    <value>HDNG2RLL_P</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_P.Parent" xml:space="preserve">
+    <value>groupBox11</value>
+  </data>
+  <data name="&gt;&gt;HDNG2RLL_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label64.Name" xml:space="preserve">
+    <value>label64</value>
   </data>
-  <data name="&gt;&gt;label68.Type" xml:space="preserve">
+  <data name="&gt;&gt;label64.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;label68.Parent" xml:space="preserve">
-    <value>groupBox12</value>
+  <data name="&gt;&gt;label64.Parent" xml:space="preserve">
+    <value>groupBox11</value>
   </data>
-  <data name="&gt;&gt;label68.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;label64.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox12.Location" type="System.Drawing.Point, System.Drawing">
-    <value>213, 123</value>
+  <data name="groupBox11.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 123</value>
   </data>
-  <data name="groupBox12.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="groupBox11.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox12.TabIndex" type="System.Int32, mscorlib">
-    <value>19</value>
+  <data name="groupBox11.TabIndex" type="System.Int32, mscorlib">
+    <value>20</value>
   </data>
-  <data name="groupBox12.Text" xml:space="preserve">
-    <value>Nav Pitch AS Pid</value>
+  <data name="groupBox11.Text" xml:space="preserve">
+    <value>Nav Roll Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox12.Name" xml:space="preserve">
-    <value>groupBox12</value>
+  <data name="&gt;&gt;groupBox11.Name" xml:space="preserve">
+    <value>groupBox11</value>
   </data>
-  <data name="&gt;&gt;groupBox12.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox11.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox12.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox11.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox12.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="&gt;&gt;groupBox11.ZOrder" xml:space="preserve">
+    <value>9</value>
   </data>
   <data name="HDNG2RLL_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -1848,29 +2640,125 @@
   <data name="&gt;&gt;label64.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox11.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 123</value>
+  <data name="&gt;&gt;YW2SRV_IMAX.Name" xml:space="preserve">
+    <value>YW2SRV_IMAX</value>
   </data>
-  <data name="groupBox11.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;YW2SRV_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_IMAX.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label57.Name" xml:space="preserve">
+    <value>label57</value>
+  </data>
+  <data name="&gt;&gt;label57.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label57.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label57.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_D.Name" xml:space="preserve">
+    <value>YW2SRV_D</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_D.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label58.Name" xml:space="preserve">
+    <value>label58</value>
+  </data>
+  <data name="&gt;&gt;label58.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label58.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label58.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_I.Name" xml:space="preserve">
+    <value>YW2SRV_I</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_I.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label59.Name" xml:space="preserve">
+    <value>label59</value>
+  </data>
+  <data name="&gt;&gt;label59.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label59.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label59.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Name" xml:space="preserve">
+    <value>YW2SRV_P</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label60.Name" xml:space="preserve">
+    <value>label60</value>
+  </data>
+  <data name="&gt;&gt;label60.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label60.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label60.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="groupBox10.Location" type="System.Drawing.Point, System.Drawing">
+    <value>414, 15</value>
+  </data>
+  <data name="groupBox10.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox11.TabIndex" type="System.Int32, mscorlib">
-    <value>20</value>
+  <data name="groupBox10.TabIndex" type="System.Int32, mscorlib">
+    <value>21</value>
   </data>
-  <data name="groupBox11.Text" xml:space="preserve">
-    <value>Nav Roll Pid</value>
+  <data name="groupBox10.Text" xml:space="preserve">
+    <value>Servo Yaw Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox11.Name" xml:space="preserve">
-    <value>groupBox11</value>
+  <data name="&gt;&gt;groupBox10.Name" xml:space="preserve">
+    <value>groupBox10</value>
   </data>
-  <data name="&gt;&gt;groupBox11.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox10.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox11.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox10.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox11.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="&gt;&gt;groupBox10.ZOrder" xml:space="preserve">
+    <value>10</value>
   </data>
   <data name="YW2SRV_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -1998,95 +2886,191 @@
   <data name="label59.Size" type="System.Drawing.Size, System.Drawing">
     <value>10, 13</value>
   </data>
-  <data name="label59.TabIndex" type="System.Int32, mscorlib">
-    <value>14</value>
+  <data name="label59.TabIndex" type="System.Int32, mscorlib">
+    <value>14</value>
+  </data>
+  <data name="label59.Text" xml:space="preserve">
+    <value>I</value>
+  </data>
+  <data name="&gt;&gt;label59.Name" xml:space="preserve">
+    <value>label59</value>
+  </data>
+  <data name="&gt;&gt;label59.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label59.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label59.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="YW2SRV_P.Location" type="System.Drawing.Point, System.Drawing">
+    <value>111, 13</value>
+  </data>
+  <data name="YW2SRV_P.Size" type="System.Drawing.Size, System.Drawing">
+    <value>78, 20</value>
+  </data>
+  <data name="YW2SRV_P.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Name" xml:space="preserve">
+    <value>YW2SRV_P</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;YW2SRV_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="label60.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label60.Location" type="System.Drawing.Point, System.Drawing">
+    <value>6, 17</value>
+  </data>
+  <data name="label60.Size" type="System.Drawing.Size, System.Drawing">
+    <value>14, 13</value>
+  </data>
+  <data name="label60.TabIndex" type="System.Int32, mscorlib">
+    <value>15</value>
+  </data>
+  <data name="label60.Text" xml:space="preserve">
+    <value>P</value>
+  </data>
+  <data name="&gt;&gt;label60.Name" xml:space="preserve">
+    <value>label60</value>
+  </data>
+  <data name="&gt;&gt;label60.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label60.Parent" xml:space="preserve">
+    <value>groupBox10</value>
+  </data>
+  <data name="&gt;&gt;label60.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_IMAX.Name" xml:space="preserve">
+    <value>PTCH2SRV_IMAX</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_IMAX.Parent" xml:space="preserve">
+    <value>groupBox9</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label53.Name" xml:space="preserve">
+    <value>label53</value>
+  </data>
+  <data name="&gt;&gt;label53.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label53.Parent" xml:space="preserve">
+    <value>groupBox9</value>
+  </data>
+  <data name="&gt;&gt;label53.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_D.Name" xml:space="preserve">
+    <value>PTCH2SRV_D</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;PTCH2SRV_D.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="label59.Text" xml:space="preserve">
-    <value>I</value>
+  <data name="&gt;&gt;PTCH2SRV_D.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="&gt;&gt;label59.Name" xml:space="preserve">
-    <value>label59</value>
+  <data name="&gt;&gt;label54.Name" xml:space="preserve">
+    <value>label54</value>
   </data>
-  <data name="&gt;&gt;label59.Type" xml:space="preserve">
+  <data name="&gt;&gt;label54.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;label59.Parent" xml:space="preserve">
-    <value>groupBox10</value>
+  <data name="&gt;&gt;label54.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="&gt;&gt;label59.ZOrder" xml:space="preserve">
-    <value>5</value>
+  <data name="&gt;&gt;label54.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="YW2SRV_P.Location" type="System.Drawing.Point, System.Drawing">
-    <value>111, 13</value>
+  <data name="&gt;&gt;PTCH2SRV_I.Name" xml:space="preserve">
+    <value>PTCH2SRV_I</value>
   </data>
-  <data name="YW2SRV_P.Size" type="System.Drawing.Size, System.Drawing">
-    <value>78, 20</value>
+  <data name="&gt;&gt;PTCH2SRV_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="YW2SRV_P.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="&gt;&gt;PTCH2SRV_I.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="&gt;&gt;YW2SRV_P.Name" xml:space="preserve">
-    <value>YW2SRV_P</value>
+  <data name="&gt;&gt;PTCH2SRV_I.ZOrder" xml:space="preserve">
+    <value>4</value>
   </data>
-  <data name="&gt;&gt;YW2SRV_P.Type" xml:space="preserve">
-    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="&gt;&gt;label55.Name" xml:space="preserve">
+    <value>label55</value>
   </data>
-  <data name="&gt;&gt;YW2SRV_P.Parent" xml:space="preserve">
-    <value>groupBox10</value>
+  <data name="&gt;&gt;label55.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;YW2SRV_P.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name="&gt;&gt;label55.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="label60.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="&gt;&gt;label55.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="label60.Location" type="System.Drawing.Point, System.Drawing">
-    <value>6, 17</value>
+  <data name="&gt;&gt;PTCH2SRV_P.Name" xml:space="preserve">
+    <value>PTCH2SRV_P</value>
   </data>
-  <data name="label60.Size" type="System.Drawing.Size, System.Drawing">
-    <value>14, 13</value>
+  <data name="&gt;&gt;PTCH2SRV_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="label60.TabIndex" type="System.Int32, mscorlib">
-    <value>15</value>
+  <data name="&gt;&gt;PTCH2SRV_P.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="label60.Text" xml:space="preserve">
-    <value>P</value>
+  <data name="&gt;&gt;PTCH2SRV_P.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name="&gt;&gt;label60.Name" xml:space="preserve">
-    <value>label60</value>
+  <data name="&gt;&gt;label56.Name" xml:space="preserve">
+    <value>label56</value>
   </data>
-  <data name="&gt;&gt;label60.Type" xml:space="preserve">
+  <data name="&gt;&gt;label56.Type" xml:space="preserve">
     <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;label60.Parent" xml:space="preserve">
-    <value>groupBox10</value>
+  <data name="&gt;&gt;label56.Parent" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="&gt;&gt;label60.ZOrder" xml:space="preserve">
+  <data name="&gt;&gt;label56.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox10.Location" type="System.Drawing.Point, System.Drawing">
-    <value>414, 15</value>
+  <data name="groupBox9.Location" type="System.Drawing.Point, System.Drawing">
+    <value>213, 15</value>
   </data>
-  <data name="groupBox10.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="groupBox9.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox10.TabIndex" type="System.Int32, mscorlib">
-    <value>21</value>
+  <data name="groupBox9.TabIndex" type="System.Int32, mscorlib">
+    <value>22</value>
   </data>
-  <data name="groupBox10.Text" xml:space="preserve">
-    <value>Servo Yaw Pid</value>
+  <data name="groupBox9.Text" xml:space="preserve">
+    <value>Servo Pitch Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox10.Name" xml:space="preserve">
-    <value>groupBox10</value>
+  <data name="&gt;&gt;groupBox9.Name" xml:space="preserve">
+    <value>groupBox9</value>
   </data>
-  <data name="&gt;&gt;groupBox10.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox9.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox10.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox9.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox10.ZOrder" xml:space="preserve">
-    <value>9</value>
+  <data name="&gt;&gt;groupBox9.ZOrder" xml:space="preserve">
+    <value>11</value>
   </data>
   <data name="PTCH2SRV_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -2280,29 +3264,125 @@
   <data name="&gt;&gt;label56.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox9.Location" type="System.Drawing.Point, System.Drawing">
-    <value>213, 15</value>
+  <data name="&gt;&gt;RLL2SRV_IMAX.Name" xml:space="preserve">
+    <value>RLL2SRV_IMAX</value>
   </data>
-  <data name="groupBox9.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="&gt;&gt;RLL2SRV_IMAX.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_IMAX.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_IMAX.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;label49.Name" xml:space="preserve">
+    <value>label49</value>
+  </data>
+  <data name="&gt;&gt;label49.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label49.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;label49.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_D.Name" xml:space="preserve">
+    <value>RLL2SRV_D</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_D.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_D.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_D.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;label50.Name" xml:space="preserve">
+    <value>label50</value>
+  </data>
+  <data name="&gt;&gt;label50.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label50.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;label50.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_I.Name" xml:space="preserve">
+    <value>RLL2SRV_I</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_I.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_I.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_I.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;label51.Name" xml:space="preserve">
+    <value>label51</value>
+  </data>
+  <data name="&gt;&gt;label51.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label51.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;label51.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_P.Name" xml:space="preserve">
+    <value>RLL2SRV_P</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_P.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_P.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;RLL2SRV_P.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;label52.Name" xml:space="preserve">
+    <value>label52</value>
+  </data>
+  <data name="&gt;&gt;label52.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label52.Parent" xml:space="preserve">
+    <value>groupBox8</value>
+  </data>
+  <data name="&gt;&gt;label52.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="groupBox8.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 15</value>
+  </data>
+  <data name="groupBox8.Size" type="System.Drawing.Size, System.Drawing">
     <value>195, 108</value>
   </data>
-  <data name="groupBox9.TabIndex" type="System.Int32, mscorlib">
-    <value>22</value>
+  <data name="groupBox8.TabIndex" type="System.Int32, mscorlib">
+    <value>23</value>
   </data>
-  <data name="groupBox9.Text" xml:space="preserve">
-    <value>Servo Pitch Pid</value>
+  <data name="groupBox8.Text" xml:space="preserve">
+    <value>Servo Roll Pid</value>
   </data>
-  <data name="&gt;&gt;groupBox9.Name" xml:space="preserve">
-    <value>groupBox9</value>
+  <data name="&gt;&gt;groupBox8.Name" xml:space="preserve">
+    <value>groupBox8</value>
   </data>
-  <data name="&gt;&gt;groupBox9.Type" xml:space="preserve">
+  <data name="&gt;&gt;groupBox8.Type" xml:space="preserve">
     <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="&gt;&gt;groupBox9.Parent" xml:space="preserve">
+  <data name="&gt;&gt;groupBox8.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox9.ZOrder" xml:space="preserve">
-    <value>10</value>
+  <data name="&gt;&gt;groupBox8.ZOrder" xml:space="preserve">
+    <value>12</value>
   </data>
   <data name="RLL2SRV_IMAX.Location" type="System.Drawing.Point, System.Drawing">
     <value>111, 82</value>
@@ -2496,33 +3576,39 @@
   <data name="&gt;&gt;label52.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="groupBox8.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 15</value>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="BUT_writePIDS.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
   </data>
-  <data name="groupBox8.Size" type="System.Drawing.Size, System.Drawing">
-    <value>195, 108</value>
+  <data name="BUT_writePIDS.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="groupBox8.TabIndex" type="System.Int32, mscorlib">
-    <value>23</value>
+  <data name="BUT_writePIDS.Location" type="System.Drawing.Point, System.Drawing">
+    <value>261, 437</value>
   </data>
-  <data name="groupBox8.Text" xml:space="preserve">
-    <value>Servo Roll Pid</value>
+  <data name="BUT_writePIDS.Size" type="System.Drawing.Size, System.Drawing">
+    <value>103, 19</value>
   </data>
-  <data name="&gt;&gt;groupBox8.Name" xml:space="preserve">
-    <value>groupBox8</value>
+  <data name="BUT_writePIDS.TabIndex" type="System.Int32, mscorlib">
+    <value>70</value>
   </data>
-  <data name="&gt;&gt;groupBox8.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="BUT_writePIDS.Text" xml:space="preserve">
+    <value>Write Params</value>
   </data>
-  <data name="&gt;&gt;groupBox8.Parent" xml:space="preserve">
+  <data name="&gt;&gt;BUT_writePIDS.Name" xml:space="preserve">
+    <value>BUT_writePIDS</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.Type" xml:space="preserve">
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;BUT_writePIDS.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;groupBox8.ZOrder" xml:space="preserve">
-    <value>11</value>
+  <data name="&gt;&gt;BUT_writePIDS.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
-  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -2542,6 +3628,6 @@
     <value>ConfigArduplane</value>
   </data>
   <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4498.24834, Culture=neutral, PublicKeyToken=null</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs
index b9795fb111e3fe2ca0806b9f0247137c5d423f74..0cbdd791f892d2b3bbd1587eacaa7fea8d41bac1 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs
@@ -25,12 +25,12 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
 
         private void BUT_MagCalibration_Click(object sender, EventArgs e)
         {
+            // list of x,y,z 's
             List<Tuple<float, float, float>> data = new List<Tuple<float, float, float>>();
 
+            // backup current rate and set to 10 hz
             byte backupratesens = MainV2.cs.ratesensors;
-
             MainV2.cs.ratesensors = 10;
-
             MainV2.comPort.requestDatastream((byte)MAVLink.MAV_DATA_STREAM.RAW_SENSORS, MainV2.cs.ratesensors); // mag captures at 10 hz
 
             CustomMessageBox.Show("Data will be collected for 30 seconds, Please click ok and move the apm around all axises");
@@ -43,6 +43,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
 
             while (deadline > DateTime.Now)
             {
+                // dont let the gui hang
                 Application.DoEvents();
 
                 if (oldmx != MainV2.cs.mx &&
@@ -60,7 +61,9 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
                 }
             }
 
+            // restore old sensor rate
             MainV2.cs.ratesensors = backupratesens;
+            MainV2.comPort.requestDatastream((byte)MAVLink.MAV_DATA_STREAM.RAW_SENSORS, MainV2.cs.ratesensors);
 
             if (data.Count < 10)
             {
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs
index 2bd40512120e3665f29ab2482ea20c0acab0fb3b..e40e40694014f807726203d5bfd9e3cb96106fb3 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs
@@ -74,6 +74,8 @@
             this.BUT_Joystick = new ArdupilotMega.Controls.MyButton();
             this.BUT_videostop = new ArdupilotMega.Controls.MyButton();
             this.BUT_videostart = new ArdupilotMega.Controls.MyButton();
+            this.label1 = new System.Windows.Forms.Label();
+            this.CHK_maprotation = new System.Windows.Forms.CheckBox();
             ((System.ComponentModel.ISupportInitialize)(this.NUM_tracklength)).BeginInit();
             this.SuspendLayout();
             // 
@@ -94,6 +96,7 @@
             resources.GetString("CMB_ratesensors.Items4")});
             resources.ApplyResources(this.CMB_ratesensors, "CMB_ratesensors");
             this.CMB_ratesensors.Name = "CMB_ratesensors";
+            this.CMB_ratesensors.SelectedIndexChanged += new System.EventHandler(this.CMB_ratesensors_SelectedIndexChanged);
             // 
             // label26
             // 
@@ -348,6 +351,7 @@
             this.CMB_osdcolor.FormattingEnabled = true;
             resources.ApplyResources(this.CMB_osdcolor, "CMB_osdcolor");
             this.CMB_osdcolor.Name = "CMB_osdcolor";
+            this.CMB_osdcolor.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.CMB_osdcolor_DrawItem);
             this.CMB_osdcolor.SelectedIndexChanged += new System.EventHandler(this.CMB_osdcolor_SelectedIndexChanged);
             // 
             // CMB_language
@@ -377,7 +381,7 @@
             resources.ApplyResources(this.CHK_hudshow, "CHK_hudshow");
             this.CHK_hudshow.Name = "CHK_hudshow";
             this.CHK_hudshow.UseVisualStyleBackColor = true;
-            this.CHK_hudshow.Click += new System.EventHandler(this.CHK_hudshow_CheckedChanged);
+            this.CHK_hudshow.CheckedChanged += new System.EventHandler(this.CHK_hudshow_CheckedChanged);
             // 
             // label92
             // 
@@ -391,6 +395,7 @@
             resources.ApplyResources(this.CMB_videosources, "CMB_videosources");
             this.CMB_videosources.Name = "CMB_videosources";
             this.CMB_videosources.SelectedIndexChanged += new System.EventHandler(this.CMB_videosources_SelectedIndexChanged);
+            this.CMB_videosources.Click += new System.EventHandler(this.CMB_videosources_Click);
             // 
             // BUT_Joystick
             // 
@@ -413,10 +418,24 @@
             this.BUT_videostart.UseVisualStyleBackColor = true;
             this.BUT_videostart.Click += new System.EventHandler(this.BUT_videostart_Click);
             // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // CHK_maprotation
+            // 
+            resources.ApplyResources(this.CHK_maprotation, "CHK_maprotation");
+            this.CHK_maprotation.Name = "CHK_maprotation";
+            this.CHK_maprotation.UseVisualStyleBackColor = true;
+            this.CHK_maprotation.CheckedChanged += new System.EventHandler(this.CHK_maprotation_CheckedChanged);
+            // 
             // ConfigPlanner
             // 
             resources.ApplyResources(this, "$this");
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.CHK_maprotation);
             this.Controls.Add(this.label33);
             this.Controls.Add(this.CMB_ratesensors);
             this.Controls.Add(this.label26);
@@ -463,6 +482,7 @@
             this.Controls.Add(this.BUT_videostop);
             this.Controls.Add(this.BUT_videostart);
             this.Name = "ConfigPlanner";
+            this.Load += new System.EventHandler(this.ConfigPlanner_Load);
             ((System.ComponentModel.ISupportInitialize)(this.NUM_tracklength)).EndInit();
             this.ResumeLayout(false);
 
@@ -515,5 +535,7 @@
         private ArdupilotMega.Controls.MyButton BUT_Joystick;
         private ArdupilotMega.Controls.MyButton BUT_videostop;
         private ArdupilotMega.Controls.MyButton BUT_videostart;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.CheckBox CHK_maprotation;
     }
 }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs
index 11e3e4a01ef93e7f1c544f2633454ea295970915..1cb8bf65222101dabe6f424b3725c67edc60a17f 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs
@@ -11,13 +11,15 @@ using System.Windows.Forms;
 using DirectShowLib;
 using ArdupilotMega.Controls.BackstageView;
 using ArdupilotMega.Controls;
+using ArdupilotMega.Utilities;
+using System.Threading;
 
 namespace ArdupilotMega.GCSViews.ConfigurationView
 {
     public partial class ConfigPlanner : BackStageViewContentPanel
     {
-        // AR todo: replicate this functionality
         private bool startup = false;
+        List<CultureInfo> languages = new List<CultureInfo>();
 
         public ConfigPlanner()
         {
@@ -291,32 +293,54 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
 
         private void CMB_rateattitude_SelectedIndexChanged(object sender, EventArgs e)
         {
+            if (startup)
+                return;
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.rateattitude = byte.Parse(((ComboBox)sender).Text);
+
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.EXTRA1, MainV2.cs.rateattitude); // request attitude
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.EXTRA2, MainV2.cs.rateattitude); // request vfr
         }
 
         private void CMB_rateposition_SelectedIndexChanged(object sender, EventArgs e)
         {
+            if (startup)
+                return;
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.rateposition = byte.Parse(((ComboBox)sender).Text);
+
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.POSITION, MainV2.cs.rateposition); // request gps
         }
 
         private void CMB_ratestatus_SelectedIndexChanged(object sender, EventArgs e)
         {
+            if (startup)
+                return;
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.ratestatus = byte.Parse(((ComboBox)sender).Text);
+
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.EXTENDED_STATUS, MainV2.cs.ratestatus); // mode
         }
 
         private void CMB_raterc_SelectedIndexChanged(object sender, EventArgs e)
         {
+            if (startup)
+                return;
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.raterc = byte.Parse(((ComboBox)sender).Text);
+
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.RC_CHANNELS, MainV2.cs.raterc); // request rc info 
         }
 
         private void CMB_ratesensors_SelectedIndexChanged(object sender, EventArgs e)
         {
+            if (startup)
+                return;
             MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text;
             MainV2.cs.ratesensors = byte.Parse(((ComboBox)sender).Text);
+
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.EXTRA3, MainV2.cs.ratesensors); // request extra stuff - tridge
+            MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.RAW_SENSORS, MainV2.cs.ratesensors); // request raw sensor
         }
 
         private void CHK_mavdebug_CheckedChanged(object sender, EventArgs e)
@@ -371,5 +395,154 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
             MainV2.config["CHK_GDIPlus"] = CHK_GDIPlus.Checked.ToString();
         }
 
+        private void ConfigPlanner_Load(object sender, EventArgs e)
+        {
+            startup = true;
+
+            // setup up camera button states
+            if (MainV2.cam != null)
+            {
+                BUT_videostart.Enabled = false;
+                CHK_hudshow.Checked = GCSViews.FlightData.myhud.hudon;
+            }
+            else
+            {
+                BUT_videostart.Enabled = true;
+            }
+
+            // setup speech states
+            if (MainV2.config["speechenable"] != null)
+                CHK_enablespeech.Checked = bool.Parse(MainV2.config["speechenable"].ToString());
+            if (MainV2.config["speechwaypointenabled"] != null)
+                CHK_speechwaypoint.Checked = bool.Parse(MainV2.config["speechwaypointenabled"].ToString());
+            if (MainV2.config["speechmodeenabled"] != null)
+                CHK_speechmode.Checked = bool.Parse(MainV2.config["speechmodeenabled"].ToString());
+            if (MainV2.config["speechcustomenabled"] != null)
+                CHK_speechcustom.Checked = bool.Parse(MainV2.config["speechcustomenabled"].ToString());
+            if (MainV2.config["speechbatteryenabled"] != null)
+                CHK_speechbattery.Checked = bool.Parse(MainV2.config["speechbatteryenabled"].ToString());
+            if (MainV2.config["speechaltenabled"] != null)
+                CHK_speechaltwarning.Checked = bool.Parse(MainV2.config["speechaltenabled"].ToString());
+
+            // this can't fail because it set at startup
+            NUM_tracklength.Value = int.Parse(MainV2.config["NUM_tracklength"].ToString());
+
+            // get wps on connect
+            if (MainV2.config["loadwpsonconnect"] != null)
+                CHK_loadwponconnect.Checked = bool.Parse(MainV2.config["loadwpsonconnect"].ToString());
+
+            // setup other config state
+            if (MainV2.config["CHK_resetapmonconnect"] != null)
+                CHK_resetapmonconnect.Checked = bool.Parse(MainV2.config["CHK_resetapmonconnect"].ToString());
+
+            CMB_rateattitude.Text = MainV2.cs.rateattitude.ToString();
+            CMB_rateposition.Text = MainV2.cs.rateposition.ToString();
+            CMB_raterc.Text = MainV2.cs.raterc.ToString();
+            CMB_ratestatus.Text = MainV2.cs.ratestatus.ToString();
+            CMB_ratesensors.Text = MainV2.cs.ratesensors.ToString();
+
+
+            if (MainV2.config["CHK_GDIPlus"] != null)
+                CHK_GDIPlus.Checked = bool.Parse(MainV2.config["CHK_GDIPlus"].ToString());
+
+            if (MainV2.config["CHK_maprotation"] != null)
+                CHK_maprotation.Checked = bool.Parse(MainV2.config["CHK_maprotation"].ToString());
+
+            //set hud color state
+            string hudcolor = (string)MainV2.config["hudcolor"];
+
+            CMB_osdcolor.DataSource = Enum.GetNames(typeof(KnownColor));
+            if (hudcolor != null)
+            {
+                int index = CMB_osdcolor.Items.IndexOf(hudcolor);
+                CMB_osdcolor.SelectedIndex = index;
+            }
+            else
+            {
+                int index = CMB_osdcolor.Items.IndexOf("White");
+                CMB_osdcolor.SelectedIndex = index;
+            }
+
+            // set distance/speed unit states
+            CMB_distunits.DataSource = Enum.GetNames(typeof(Common.distances));
+            CMB_speedunits.DataSource = Enum.GetNames(typeof(Common.speeds));
+
+            if (MainV2.config["distunits"] != null)
+                CMB_distunits.Text = MainV2.config["distunits"].ToString();
+            if (MainV2.config["speedunits"] != null)
+                CMB_speedunits.Text = MainV2.config["speedunits"].ToString();
+
+            // setup language selection
+            CultureInfo ci = null;
+            foreach (string name in new string[] { "en-US", "zh-Hans", "zh-TW", "ru-RU", "Fr", "Pl", "it-IT", "es-ES" })
+            {
+                ci = CultureInfoEx.GetCultureInfo(name);
+                if (ci != null)
+                    languages.Add(ci);
+            }
+
+            CMB_language.DisplayMember = "DisplayName";
+            CMB_language.DataSource = languages;
+            ci = Thread.CurrentThread.CurrentUICulture;
+            for (int i = 0; i < languages.Count; i++)
+            {
+                if (ci.IsChildOf(languages[i]))
+                {
+                    CMB_language.SelectedIndex = i;
+                    break;
+                }
+            }
+            CMB_language.SelectedIndexChanged += CMB_language_SelectedIndexChanged;
+
+            startup = false;
+        }
+
+        private void CMB_osdcolor_DrawItem(object sender, DrawItemEventArgs e)
+        {
+            if (e.Index < 0)
+                return;
+
+            Graphics g = e.Graphics;
+            Rectangle rect = e.Bounds;
+            Brush brush = null;
+
+            if ((e.State & DrawItemState.Selected) == 0)
+                brush = new SolidBrush(CMB_osdcolor.BackColor);
+            else
+                brush = SystemBrushes.Highlight;
+
+            g.FillRectangle(brush, rect);
+
+            brush = new SolidBrush(Color.FromName((string)CMB_osdcolor.Items[e.Index]));
+
+            g.FillRectangle(brush, rect.X + 2, rect.Y + 2, 30, rect.Height - 4);
+            g.DrawRectangle(Pens.Black, rect.X + 2, rect.Y + 2, 30, rect.Height - 4);
+
+            if ((e.State & DrawItemState.Selected) == 0)
+                brush = new SolidBrush(CMB_osdcolor.ForeColor);
+            else
+                brush = SystemBrushes.HighlightText;
+            g.DrawString(CMB_osdcolor.Items[e.Index].ToString(),
+                CMB_osdcolor.Font, brush, rect.X + 35, rect.Top + rect.Height - CMB_osdcolor.Font.Height);
+        }
+
+        private void CMB_videosources_Click(object sender, EventArgs e)
+        {
+            // the reason why i dont populate this list is because on linux/mac this call will fail.
+            WebCamService.Capture capt = new WebCamService.Capture();
+
+            List<string> devices = WebCamService.Capture.getDevices();
+
+            CMB_videosources.DataSource = devices;
+
+            capt.Dispose();
+        }
+
+        private void CHK_maprotation_CheckedChanged(object sender, EventArgs e)
+        {
+            if (startup)
+                return;
+            MainV2.config["CHK_maprotation"] = CHK_maprotation.Checked.ToString();
+        }
     }
 }
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx
index 8e15fbeacfbce438fcbbc35ad7480d9a862be90c..5ce06086d2f8f9e69420473a5f0f82ad9e3aab60 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx
@@ -145,7 +145,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label33.ZOrder" xml:space="preserve">
-    <value>0</value>
+    <value>2</value>
   </data>
   <data name="CMB_ratesensors.Items" xml:space="preserve">
     <value>0</value>
@@ -181,7 +181,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_ratesensors.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>3</value>
   </data>
   <data name="label26.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -208,7 +208,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label26.ZOrder" xml:space="preserve">
-    <value>2</value>
+    <value>4</value>
   </data>
   <data name="CMB_videoresolutions.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 49</value>
@@ -229,7 +229,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_videoresolutions.ZOrder" xml:space="preserve">
-    <value>3</value>
+    <value>5</value>
   </data>
   <data name="label12.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -256,7 +256,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label12.ZOrder" xml:space="preserve">
-    <value>4</value>
+    <value>6</value>
   </data>
   <data name="CHK_GDIPlus.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -283,7 +283,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_GDIPlus.ZOrder" xml:space="preserve">
-    <value>5</value>
+    <value>7</value>
   </data>
   <data name="label24.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -310,7 +310,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label24.ZOrder" xml:space="preserve">
-    <value>6</value>
+    <value>8</value>
   </data>
   <data name="CHK_loadwponconnect.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -337,7 +337,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_loadwponconnect.ZOrder" xml:space="preserve">
-    <value>7</value>
+    <value>9</value>
   </data>
   <data name="label23.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -364,7 +364,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label23.ZOrder" xml:space="preserve">
-    <value>8</value>
+    <value>10</value>
   </data>
   <data name="NUM_tracklength.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 293</value>
@@ -385,7 +385,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;NUM_tracklength.ZOrder" xml:space="preserve">
-    <value>9</value>
+    <value>11</value>
   </data>
   <data name="CHK_speechaltwarning.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -412,7 +412,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_speechaltwarning.ZOrder" xml:space="preserve">
-    <value>10</value>
+    <value>12</value>
   </data>
   <data name="label108.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -439,7 +439,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label108.ZOrder" xml:space="preserve">
-    <value>11</value>
+    <value>13</value>
   </data>
   <data name="CHK_resetapmonconnect.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -466,7 +466,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_resetapmonconnect.ZOrder" xml:space="preserve">
-    <value>12</value>
+    <value>14</value>
   </data>
   <data name="CHK_mavdebug.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Bottom, Left</value>
@@ -475,7 +475,7 @@
     <value>NoControl</value>
   </data>
   <data name="CHK_mavdebug.Location" type="System.Drawing.Point, System.Drawing">
-    <value>15, 378</value>
+    <value>15, 398</value>
   </data>
   <data name="CHK_mavdebug.Size" type="System.Drawing.Size, System.Drawing">
     <value>144, 17</value>
@@ -496,7 +496,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_mavdebug.ZOrder" xml:space="preserve">
-    <value>13</value>
+    <value>15</value>
   </data>
   <data name="label107.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -523,7 +523,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label107.ZOrder" xml:space="preserve">
-    <value>14</value>
+    <value>16</value>
   </data>
   <data name="CMB_raterc.Items" xml:space="preserve">
     <value>0</value>
@@ -556,7 +556,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_raterc.ZOrder" xml:space="preserve">
-    <value>15</value>
+    <value>17</value>
   </data>
   <data name="label104.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -583,7 +583,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label104.ZOrder" xml:space="preserve">
-    <value>16</value>
+    <value>18</value>
   </data>
   <data name="label103.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -610,7 +610,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label103.ZOrder" xml:space="preserve">
-    <value>17</value>
+    <value>19</value>
   </data>
   <data name="label102.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -637,7 +637,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label102.ZOrder" xml:space="preserve">
-    <value>18</value>
+    <value>20</value>
   </data>
   <data name="label101.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -664,7 +664,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label101.ZOrder" xml:space="preserve">
-    <value>19</value>
+    <value>21</value>
   </data>
   <data name="CMB_ratestatus.Items" xml:space="preserve">
     <value>0</value>
@@ -697,7 +697,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_ratestatus.ZOrder" xml:space="preserve">
-    <value>20</value>
+    <value>22</value>
   </data>
   <data name="CMB_rateposition.Items" xml:space="preserve">
     <value>0</value>
@@ -730,7 +730,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_rateposition.ZOrder" xml:space="preserve">
-    <value>21</value>
+    <value>23</value>
   </data>
   <data name="CMB_rateattitude.Items" xml:space="preserve">
     <value>0</value>
@@ -763,7 +763,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_rateattitude.ZOrder" xml:space="preserve">
-    <value>22</value>
+    <value>24</value>
   </data>
   <data name="label99.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -791,7 +791,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label99.ZOrder" xml:space="preserve">
-    <value>23</value>
+    <value>25</value>
   </data>
   <data name="label98.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -818,7 +818,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label98.ZOrder" xml:space="preserve">
-    <value>24</value>
+    <value>26</value>
   </data>
   <data name="label97.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -845,7 +845,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label97.ZOrder" xml:space="preserve">
-    <value>25</value>
+    <value>27</value>
   </data>
   <data name="CMB_speedunits.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 216</value>
@@ -866,7 +866,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_speedunits.ZOrder" xml:space="preserve">
-    <value>26</value>
+    <value>28</value>
   </data>
   <data name="CMB_distunits.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 189</value>
@@ -887,7 +887,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_distunits.ZOrder" xml:space="preserve">
-    <value>27</value>
+    <value>29</value>
   </data>
   <data name="label96.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -914,7 +914,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label96.ZOrder" xml:space="preserve">
-    <value>28</value>
+    <value>30</value>
   </data>
   <data name="label95.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -941,7 +941,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label95.ZOrder" xml:space="preserve">
-    <value>29</value>
+    <value>31</value>
   </data>
   <data name="CHK_speechbattery.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -968,7 +968,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_speechbattery.ZOrder" xml:space="preserve">
-    <value>30</value>
+    <value>32</value>
   </data>
   <data name="CHK_speechcustom.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -995,7 +995,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_speechcustom.ZOrder" xml:space="preserve">
-    <value>31</value>
+    <value>33</value>
   </data>
   <data name="CHK_speechmode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1022,7 +1022,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_speechmode.ZOrder" xml:space="preserve">
-    <value>32</value>
+    <value>34</value>
   </data>
   <data name="CHK_speechwaypoint.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1049,7 +1049,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_speechwaypoint.ZOrder" xml:space="preserve">
-    <value>33</value>
+    <value>35</value>
   </data>
   <data name="label94.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1076,7 +1076,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label94.ZOrder" xml:space="preserve">
-    <value>34</value>
+    <value>36</value>
   </data>
   <data name="CMB_osdcolor.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 82</value>
@@ -1097,7 +1097,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_osdcolor.ZOrder" xml:space="preserve">
-    <value>35</value>
+    <value>37</value>
   </data>
   <data name="CMB_language.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 133</value>
@@ -1118,7 +1118,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_language.ZOrder" xml:space="preserve">
-    <value>36</value>
+    <value>38</value>
   </data>
   <data name="label93.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1145,7 +1145,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label93.ZOrder" xml:space="preserve">
-    <value>37</value>
+    <value>39</value>
   </data>
   <data name="CHK_enablespeech.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1172,7 +1172,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_enablespeech.ZOrder" xml:space="preserve">
-    <value>38</value>
+    <value>40</value>
   </data>
   <data name="CHK_hudshow.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1199,7 +1199,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CHK_hudshow.ZOrder" xml:space="preserve">
-    <value>39</value>
+    <value>41</value>
   </data>
   <data name="label92.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1226,7 +1226,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;label92.ZOrder" xml:space="preserve">
-    <value>40</value>
+    <value>42</value>
   </data>
   <data name="CMB_videosources.Location" type="System.Drawing.Point, System.Drawing">
     <value>124, 15</value>
@@ -1247,7 +1247,7 @@
     <value>$this</value>
   </data>
   <data name="&gt;&gt;CMB_videosources.ZOrder" xml:space="preserve">
-    <value>41</value>
+    <value>43</value>
   </data>
   <data name="BUT_Joystick.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1268,13 +1268,13 @@
     <value>BUT_Joystick</value>
   </data>
   <data name="&gt;&gt;BUT_Joystick.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.31567, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_Joystick.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;BUT_Joystick.ZOrder" xml:space="preserve">
-    <value>42</value>
+    <value>44</value>
   </data>
   <data name="BUT_videostop.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1295,13 +1295,13 @@
     <value>BUT_videostop</value>
   </data>
   <data name="&gt;&gt;BUT_videostop.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.31567, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_videostop.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;BUT_videostop.ZOrder" xml:space="preserve">
-    <value>43</value>
+    <value>45</value>
   </data>
   <data name="BUT_videostart.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
@@ -1322,13 +1322,67 @@
     <value>BUT_videostart</value>
   </data>
   <data name="&gt;&gt;BUT_videostart.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.31567, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_videostart.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
   <data name="&gt;&gt;BUT_videostart.ZOrder" xml:space="preserve">
-    <value>44</value>
+    <value>46</value>
+  </data>
+  <data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>15, 365</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>81, 17</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>89</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>Map Follow</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="CHK_maprotation.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="CHK_maprotation.Location" type="System.Drawing.Point, System.Drawing">
+    <value>124, 365</value>
+  </data>
+  <data name="CHK_maprotation.Size" type="System.Drawing.Size, System.Drawing">
+    <value>205, 17</value>
+  </data>
+  <data name="CHK_maprotation.TabIndex" type="System.Int32, mscorlib">
+    <value>90</value>
+  </data>
+  <data name="CHK_maprotation.Text" xml:space="preserve">
+    <value>Map is rotated to follow the plane</value>
+  </data>
+  <data name="&gt;&gt;CHK_maprotation.Name" xml:space="preserve">
+    <value>CHK_maprotation</value>
+  </data>
+  <data name="&gt;&gt;CHK_maprotation.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;CHK_maprotation.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;CHK_maprotation.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
@@ -1337,12 +1391,12 @@
     <value>6, 13</value>
   </data>
   <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
-    <value>682, 398</value>
+    <value>682, 418</value>
   </data>
   <data name="&gt;&gt;$this.Name" xml:space="preserve">
     <value>ConfigPlanner</value>
   </data>
   <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4498.31567, Culture=neutral, PublicKeyToken=null</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs
index e49bf42a85da52f2e6959b72f3c6abc85500ea5d..fd29bb23998cb7958ce11bbd67cb8c4d318ed806 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs
@@ -16,7 +16,6 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
     {
         private static readonly ILog log =
           LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
-
         private readonly ParameterMetaDataRepository _parameterMetaDataRepository;
 
         // Changes made to the params between writing to the copter
@@ -41,8 +40,6 @@ namespace ArdupilotMega.GCSViews.ConfigurationView
         public ConfigRawParams()
         {
             InitializeComponent();
-           
-            // Init the accessor class for the parameter meta data
             _parameterMetaDataRepository = new ParameterMetaDataRepository();
         }
 
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs
deleted file mode 100644
index 9878d6c5428b9041c1697057687a764493f0395c..0000000000000000000000000000000000000000
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-namespace ArdupilotMega.GCSViews.ConfigurationView
-{
-    partial class Configuration
-    {
-        /// <summary> 
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Component Designer generated code
-
-        /// <summary> 
-        /// Required method for Designer support - do not modify 
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Configuration));
-            this.backstageView = new ArdupilotMega.Controls.BackstageView.BackstageView();
-            this.SuspendLayout();
-            // 
-            // backstageView
-            // 
-            this.backstageView.AutoSize = true;
-            this.backstageView.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.backstageView.Location = new System.Drawing.Point(0, 0);
-            this.backstageView.Name = "backstageView";
-            this.backstageView.Size = new System.Drawing.Size(634, 336);
-            this.backstageView.TabIndex = 0;
-            // 
-            // Configuration
-            // 
-            this.ClientSize = new System.Drawing.Size(634, 336);
-            this.Controls.Add(this.backstageView);
-            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
-            this.Name = "Configuration";
-            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Configuration_FormClosing);
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        #endregion
-
-        private Controls.BackstageView.BackstageView backstageView;
-    }
-}
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs
deleted file mode 100644
index 60cc50f7b972196fb95627c1100f937b78143559..0000000000000000000000000000000000000000
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using ArdupilotMega.Controls.BackstageView;
-
-namespace ArdupilotMega.GCSViews.ConfigurationView
-{
-    public partial class Configuration : Form
-    {
-        public Configuration()
-        {
-            InitializeComponent();
-
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRadioInput(), "Radio Calibration"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigFlightModes(), "Flight Modes"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigHardwareOptions(), "Hardware Options"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigBatteryMonitoring(), "Battery Monitor"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationQuad(), "ArduCopter"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationPlane(), "ArduPlane"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArducopter(), "Arducopter Setup"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArduplane(), "Arduplane Setup"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigTradHeli(), "Heli Setup"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRawParams(), "Raw params (Advanced)"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigPlanner(), "Planner"));
-        }
-
-        private void Configuration_FormClosing(object sender, FormClosingEventArgs e)
-        {
-            backstageView.Close();
-        }
-    }
-}
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx
deleted file mode 100644
index 222a74addff376f7a18256f55e7d4028cc9a5826..0000000000000000000000000000000000000000
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA
-        AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOxkjAtnoOAKpJ4vyiK
-        c+8nh3D/J4Zv/yeHcP8oi3PvKpJ4vy6fg4AzsZIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjGo2AyspPfLZ+D/yiQ
-        d/8hlXj/G6F9/xeqg/8XqYL/GKqD/xuhfv8ilnn/KZB3/y2fhP8yspPfN8ajYAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvRrDA1vpzfL6uN/yel
-        hP8XvJD/DMyY/wfQl/8FzJP/A8qS/wPJkf8EypL/BsyU/wnRmP8PzZn/Gb2R/yemhP8tqoz/Mb2a3zbQ
-        qkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAA4y6ZgMbWV/yin
-        iP8WwZP/Btqf/wDPlf8AyI7/A8aP/yfNnv9T2LP/UNax/03XsP8506b/G8ya/wHKkf8F0Zf/CNuf/xLB
-        kv8fpYT/J7KQ/y7IomAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAANcajny+w
-        kf8hqoj/CNSd/wDRlf8Axor/Hcyd/3Lhwf+p7Nj/o+vV/57m0/+X5dD/k+TN/4/jzf+K5Mz/fuHH/0PW
-        rf8HzJT/ANCT/wDRlv8OpX//HayI/yrFn58AAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAADDC
-        nmAtro7/H62J/wPWmv8Ay47/AMaO/3XhxP+e6tT/mObP/5Pjy/+Q4sr/jODJ/4ffx/+C3MT/f9vC/3nb
-        wf9y2r7/adq7/2DauP8ZzZv/Fdae/8T/9/9WxKj/HKuI/y7IomAAAAAAAAAAAAAAAAD///8AAAAAAAAA
-        AAAiuZMwKKyM/x6ohf8C1Zr/AMmL/wHGjv+49OL///////////9+3ML/f9zD/4Dcwv9+28L/e9rA/3bZ
-        vv9w1rr/Z9S4/17Rs/9Qz63/Qcyn/3LewP////////////n///8MpH7/JbKP/zXQqUAAAAAAAAAAAP//
-        /wAAAAAAAAAAABymhN8dnn//BNGa/wDKjP8AxY3/sfHf/////////////////2nXt/9w1rv/c9e8/3TX
-        vP9x17z/a9W5/2TTtf9Y0K//SMyp/zXFoP9i07X/////////////////f/LR/wDQlf8epYT/Mb2a3wAA
-        AAAAAAAA////AAAAAAADlnJgFZR1/wq4iv8AzpH/AMCD/4rmzf//////////////////////WdGv/2PU
-        tf9p1rf/atS4/2nUtv9i0rT/Vc+u/0fKpv8zxZz/Ws+w//////////////////////8GyJL/ANCS/xLB
-        kv8tq4z/OMajYAAAAAD///8AAAAAAACHZt8NkW//ANKV/wDChP9i27r//////////////////////9Dx
-        6P9MzKn/Vc+v/17Rsv9g0rP/XNCx/1XNrv9Fyaf/McSd/1fPr///////////////////////QM2m/ynK
-        oP8JzJX/C9yh/ymmhf80spPfAAAAAP///wAAcUwwAHtc/wCrfP8AyIv/AMKK////////////////////
-        /////////////5Dgyv9Gyqb/TMyq/07Nq/9MzKn/Qcmj/y/Fnf9Wzq3//////////////////////57k
-        0v8av5T/Lceg/yzOo/8M05v/Hr6T/zCghf80spIw////AABoRYAAclT/AL2H/wDBhf9R1rL/////////
-        ////////4vfw//////////////////H8+P9KzKn/Ocah/zTFnv8qwpj/Us2t////////////////////
-        ////////DLqM/yDBlv8wxp//OM6m/xPPm/8Xz53/LZF5/y+fg4////8AAGNAvwB7Wf8Aw4j/ALyC/4bj
-        yP+g5tL/g93E/2HSsv9Pzqz/Us6s//////////////////////9Yzq//Gr2S/0jLp///////////////
-        /////////////yrDm/8SvI//JMGY/zDHn/81zKT/Is2e/xTUnf8nl3v/LJJ5v////wAAXz3vAIlg/wDA
-        hf8AuoD/quzZ/5Hjyv9628D/ada2/1jRsP9Jy6f/a9a4//////////////////////+Y4s7/////////
-        //////////////////+c4tD/AbaH/xW8kf8jwZj/LcWd/y/Jn/8kzJ3/E9Ca/yGjgf8ri3Tv////AABd
-        PP8Ak2b/AL6D/w/Ekv+m6tf/j+HJ/3vawP9p1rf/W9Gx/0rNqf85yJ//Nsaf////////////////////
-        /////////////////////////////wCwe/8AtoT/ELqP/xu+k/8jwZj/KMeb/yHKm/8QzZf/HqyG/ymI
-        cf////8AAF07/wCSZP8AvYL/GMWU/6Dn1P+K38f/ddi+/27Wuf+E3MX/leHN/6fm1f+l5tX/neLQ////
-        ////////////////////////////////////////j9/J/27Vuv9Tzq7/JsKY/xa/kv8aw5T/FcaW/wvL
-        lf8aqoT/J4dw/////wAAXTv/AJFk/wC9gP8GwY3/mObQ/5rkz/+26dv/y/Hl/8Dt3/+06tz/pebV/5bg
-        zP+g5NL//////////////v///f7+//7+/v//////7fn2////////////tOnb/6Ll0v+v6Nj/jeDI/zXK
-        o/8IxJD/BMqS/xaqgv8lh2//////AABeO+8AgVf/AL1//wDBif/R9uv/1PPq/8Tv5P+36t3/rujY/6Lk
-        0v+U4cv/jt7J//j8+///////+/38//f8+//2+/r/+Pz7//3+/v/m9/P/9Pv6//D6+P9/28L/jd7J/5jj
-        z/+h5dL/qOvX/4Hmyf8f1J//E596/yOJcO////8AAGA8vwB3U/8p06P/hufM/8Ty5f/D7+T/s+vb/6bm
-        1P+c4c//j9/K/4vcyP/t+fb///7///j8/P/0+/r/8vr5//P7+f/1+/r/+/39///////i9fL/ZNO1/3HW
-        vP992sH/htzG/4vhyv+S5dD/mO7W/6X74v80noT/Io90v////wAAZkCAAHla/33ny/945cb/nunV/7Xr
-        3v+l5tT/luDN/4ndxv992cL/1vLq//v9/P/1+/n/8vv4//L69//z+/j/9Pv5/7Xo2//x+vn/////////
-        //+y59n/aNS3/3LWvP932r//fNzD/4Ljyf+J7ND/l/bd/yORdf8knH6A////AABuRzAAdlT/Xc6x/23o
-        xv9s4MH/qurZ/5jiz/+I3cb/edjA/8ju5f/3/Pv/8vv4//H6+P/y+/j/6/f0/7np3v/7/fz//v7+/6fk
-        1f+56tz///////////9h0bT/aNW4/23Wu/9v3L//dOLG/37w0f9m1rn/Hpt8/ymujTD///8AAAAAAACD
-        X98po4X/Z+7K/1vgvP+A4sf/jOHK/3rZwv+r59f/9Pv6/+/69//v+vf/8vr4/9fy6/9n0rf/VM6t/6Di
-        0v/N7+f/adO4/1PMrf9t1Lr/i9zI/1/Rs/9h0rX/ZNe4/2bbvf9s5sb/ePfV/z2ylf8lrozfAAAAAP//
-        /wAAAAAAAJNsYAWQbf9U1rP/Vee//0rYsf993sb/pebV//P7+v/s+Pb/6/f1/+749v+s5tj/Vc2u/1jP
-        r/9ZzrD/btW5/1bOr/9Wza//Vs6v/1fOr/9Z0LD/WdCy/1vTtP9d1rX/Xt+8/2btyP9k4L//IaaF/y7D
-        nmAAAAAA////AAAAAAAAAAAAD6J9zyCjgv9S68L/P9+0/2Pevv/5////7/v6/+v59//j9/L/gtvF/1PN
-        r/9Wz7D/Wc+x/1nQsf9Zz7H/WM6w/1fPsP9UzrD/VM+w/1TPrv9U0a//U9Oy/1Tatv9Z5sD/Y/LL/zSx
-        lP8qupbPAAAAAAAAAAD///8AAAAAAAAAAAAYto4wGaeE/y23lP8+5rn/6/////j////w//3/ve/i/2bV
-        uP9Tzq7/Vc+v/1jPsP9Z0LL/WM+w/1fOsf9Wz7D/Us2w/1HOrf9Qzq3/T9Cu/0zSr/9M2LP/TeC5/1bt
-        xP9HxaX/KLKQ/zTPqDAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAkvpdgG6iF/y++m//e/////P///3rl
-        yf9G0K3/VdKy/1bPsf9Wz7H/Vs6w/1bPsP9Sza//Ucyu/0/Nrf9NzKz/S82s/0fOrP9G0a7/QdWv/0Le
-        tP9I6L7/Q8Ok/yitjP8yyKJgAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAmwJlgG6iF/yK3
-        kP8k3q7/H9el/x7Pn/8tzKT/Q9Cs/1HQsP9Q0K7/TM6u/0nMrf9Hzaz/RMyp/0LNqf8+zqn/ONGo/zTV
-        qf833rD/O+S4/zvCof8orIv/MMSfYAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAkvpdgG6iE/xukgv8gy53/HNql/xzRn/8czJz/HcmZ/yXJnP8qyp7/Lcqg/yzLn/8nypz/JMqc/yTO
-        n/8l1KT/KN2r/y3Tpv8nq4n/JaqJ/yzAm2AAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAato8wFKN/zxCScv8RnHn/DbqM/wjIlP8GyZT/BsaS/wbFkf8GxZH/B8WR/wfH
-        k/8IypX/DMmV/xG3jP8WoX3/Fph2/xqkgs8ft5EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVvYACGZM8Aelr/AHlZ/wCFX/8AiWL/AJlr/wCb
-        bP8AlGf/AI5k/wB/W/8AeFj/AHtb/wCHZd8ClXBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwSzAAaESAAGI/vwBf
-        Pd8AXTz/AF08/wBdPP8AXz3fAGJAvwBoRIAAcUswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
-        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
-        /wD///8A////AP///wD///8A/+AD//+AAP/+AAA//AAAH/gAAA/wAAAH4AAAA+AAAAPAAAABwAAAAYAA
-        AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAwAAAAcAAAAHgAAAD4AAAA/AA
-        AAf4AAAP/AAAH/4AAD//gAD//+AD//////8=
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs
index 79ba73a8cd52e60fd1f4296d5a710f7cb4f421bc..889a3169812bb759ea2794221c44a086ca4a8b7c 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs
@@ -45,7 +45,7 @@
             // 
             this.ClientSize = new System.Drawing.Size(931, 468);
             this.Controls.Add(this.backstageView);
-            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            //this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
             this.MinimumSize = new System.Drawing.Size(947, 506);
             this.Name = "Setup";
             this.Text = "Setup";
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs
index 9b13408161b19e9a611731745fa613333391b685..29cabc91f75d7da8dd787ed48b40d21ef04e0710 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs
@@ -10,26 +10,62 @@ using ArdupilotMega.Controls.BackstageView;
 
 namespace ArdupilotMega.GCSViews.ConfigurationView
 {
-    public partial class Setup : Form
+    public partial class Setup : MyUserControl
     {
         public Setup()
         {
             InitializeComponent();
 
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRadioInput(), "Radio Calibration"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigFlightModes(), "Flight Modes"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigHardwareOptions(), "Hardware Options"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigBatteryMonitoring(), "Battery Monitor"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationQuad(), "ArduCopter Level"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationPlane(), "ArduPlane Level"));
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigTradHeli(), "Heli Setup"));
+            if (MainV2.comPort.BaseStream.IsOpen)
+            {
+                this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRadioInput(), "Radio Calibration"));
+                this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigFlightModes(), "Flight Modes"));
+                this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigHardwareOptions(), "Hardware Options"));
+                this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigBatteryMonitoring(), "Battery Monitor"));
+
+
+                /******************************HELI **************************/
+                if (MainV2.comPort.param["H_GYR_ENABLE"] != null) // heli
+                {
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationQuad(), "ArduCopter Level"));
+
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigTradHeli(), "Heli Setup"));
+
+                    var configpanel = new Controls.ConfigPanel();
+                    configpanel.LoadXML("ArduCopterConfig.xml");
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(configpanel, "ArduCopter Config"));
+
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArducopter(), "OLD ArduCopter Config"));
+                }
+                /****************************** ArduCopter **************************/
+                else if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2)
+                {
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationQuad(), "ArduCopter Level"));
 
-            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRawParams(), "Raw params (Advanced)"));
+                    var configpanel = new Controls.ConfigPanel();
+                    configpanel.LoadXML("ArduCopterConfig.xml");
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(configpanel, "ArduCopter Config"));
+
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArducopter(), "OLD ArduCopter Config"));
+                }
+                /****************************** ArduPlane **************************/
+                else if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane)
+                {
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibrationPlane(), "ArduPlane Level"));
+                    this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArduplane(), "ArduPlane Config"));
+                }
+
+                this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRawParams(), "Raw params (Adv)"));
+            }
+
+            
 
             this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ArdupilotMega._3DRradio(), "3DR Radio"));
 
             this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ArdupilotMega.Antenna.Tracker(), "Antenna Tracker"));
 
+            this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigPlanner(), "Planner"));
+
             this.backstageView.ActivatePage(backstageView.Pages[0]);
 
             if (!MainV2.comPort.BaseStream.IsOpen)
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/Firmware.cs b/Tools/ArdupilotMegaPlanner/GCSViews/Firmware.cs
index cc696b67458aec0c943a52f81616c7146f11abe9..fe1c616f364cae7186f35d5abe39b8fe91442bdc 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/Firmware.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/Firmware.cs
@@ -8,6 +8,7 @@ using System.Xml;
 using System.Net;
 using log4net;
 using ArdupilotMega.Arduino;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega.GCSViews
 {
@@ -649,8 +650,16 @@ namespace ArdupilotMega.GCSViews
 
         private void BUT_setup_Click(object sender, EventArgs e)
         {
-            Form temp = new GCSViews.ConfigurationView.Setup();
+            Form temp = new Form();
+            MyUserControl configview = new GCSViews.ConfigurationView.Setup();
+            temp.Controls.Add(configview);
             ThemeManager.ApplyThemeTo(temp);
+            // fix title
+            temp.Text = configview.Name;
+            // fix size
+            temp.Size = configview.Size;
+            configview.Dock = DockStyle.Fill;
+            temp.FormClosing += configview.Close;
             temp.ShowDialog();
         }
 
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs
index da690be4532422a5dd34d00a441c482552bb8970..36e947d99f151e3a9618249a5f3b249f30b9d077 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs
@@ -152,7 +152,9 @@ namespace ArdupilotMega.GCSViews
 
             CMB_action.DataSource = list;
 
-            CMB_modes.DataSource = Enum.GetNames(typeof(Common.apmmodes));
+            CMB_modes.DataSource = Common.getModesList();
+            CMB_modes.ValueMember = "Key";
+            CMB_modes.DisplayMember = "Value";
 
             CMB_setwp.SelectedIndex = 0;
 
@@ -288,7 +290,7 @@ namespace ArdupilotMega.GCSViews
                         comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.RC_CHANNELS, MainV2.cs.raterc); // request rc info
                     }
                     catch { }
-                    lastdata = DateTime.Now.AddSeconds(12); // prevent flooding
+                    lastdata = DateTime.Now.AddSeconds(120); // prevent flooding
                 }
 
                 if (!MainV2.comPort.logreadmode)
@@ -408,6 +410,11 @@ namespace ArdupilotMega.GCSViews
 
                     if (tracklast.AddSeconds(1) < DateTime.Now)
                     {
+                        if (MainV2.config["CHK_maprotation"] != null && MainV2.config["CHK_maprotation"].ToString() == "True")
+                        {
+                            setMapBearing();
+                        }
+
                         gMapControl1.HoldInvalidation = true;
 
                         while (gMapControl1.inOnPaint == true)
@@ -423,7 +430,6 @@ namespace ArdupilotMega.GCSViews
                             trackPoints.Add(new PointLatLng(MainV2.cs.lat, MainV2.cs.lng));
 
 
-
                         //                        if (CB_tuning.Checked == false) // draw if in view
                         {
 
@@ -514,6 +520,14 @@ namespace ArdupilotMega.GCSViews
             Console.WriteLine("FD Main loop exit");
         }
 
+        private void setMapBearing()
+        {
+            this.Invoke((System.Windows.Forms.MethodInvoker)delegate()
+            {
+                gMapControl1.Bearing = (int)MainV2.cs.yaw;
+            });
+        }
+
 
         // to prevent cross thread calls while in a draw and exception
         private void updateClearRoutes()
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx
index 8921faf5e3eae682cc3aabc2c405d38cd73367aa..d4124399bd04f8ef4671696c1f7f8e6e6367e139 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx
@@ -208,7 +208,7 @@
     <value>hud1</value>
   </data>
   <data name="&gt;&gt;hud1.Type" xml:space="preserve">
-    <value>hud.HUD, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.HUD, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;hud1.Parent" xml:space="preserve">
     <value>SubMainLeft.Panel1</value>
@@ -247,7 +247,7 @@
     <value>BUT_script</value>
   </data>
   <data name="&gt;&gt;BUT_script.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_script.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -280,7 +280,7 @@
     <value>BUT_joystick</value>
   </data>
   <data name="&gt;&gt;BUT_joystick.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_joystick.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -310,7 +310,7 @@
     <value>BUT_quickmanual</value>
   </data>
   <data name="&gt;&gt;BUT_quickmanual.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_quickmanual.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -340,7 +340,7 @@
     <value>BUT_quickrtl</value>
   </data>
   <data name="&gt;&gt;BUT_quickrtl.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_quickrtl.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -370,7 +370,7 @@
     <value>BUT_quickauto</value>
   </data>
   <data name="&gt;&gt;BUT_quickauto.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_quickauto.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -424,7 +424,7 @@
     <value>BUT_setwp</value>
   </data>
   <data name="&gt;&gt;BUT_setwp.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_setwp.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -475,7 +475,7 @@
     <value>BUT_setmode</value>
   </data>
   <data name="&gt;&gt;BUT_setmode.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_setmode.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -505,7 +505,7 @@
     <value>BUT_clear_track</value>
   </data>
   <data name="&gt;&gt;BUT_clear_track.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_clear_track.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -556,7 +556,7 @@
     <value>BUT_Homealt</value>
   </data>
   <data name="&gt;&gt;BUT_Homealt.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_Homealt.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -586,7 +586,7 @@
     <value>BUT_RAWSensor</value>
   </data>
   <data name="&gt;&gt;BUT_RAWSensor.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_RAWSensor.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -616,7 +616,7 @@
     <value>BUTrestartmission</value>
   </data>
   <data name="&gt;&gt;BUTrestartmission.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUTrestartmission.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -646,7 +646,7 @@
     <value>BUTactiondo</value>
   </data>
   <data name="&gt;&gt;BUTactiondo.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUTactiondo.Parent" xml:space="preserve">
     <value>tabActions</value>
@@ -700,7 +700,7 @@
     <value>Gvspeed</value>
   </data>
   <data name="&gt;&gt;Gvspeed.Type" xml:space="preserve">
-    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;Gvspeed.Parent" xml:space="preserve">
     <value>tabGauges</value>
@@ -730,7 +730,7 @@
     <value>Gheading</value>
   </data>
   <data name="&gt;&gt;Gheading.Type" xml:space="preserve">
-    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;Gheading.Parent" xml:space="preserve">
     <value>tabGauges</value>
@@ -760,7 +760,7 @@
     <value>Galt</value>
   </data>
   <data name="&gt;&gt;Galt.Type" xml:space="preserve">
-    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;Galt.Parent" xml:space="preserve">
     <value>tabGauges</value>
@@ -793,7 +793,7 @@
     <value>Gspeed</value>
   </data>
   <data name="&gt;&gt;Gspeed.Type" xml:space="preserve">
-    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;Gspeed.Parent" xml:space="preserve">
     <value>tabGauges</value>
@@ -874,7 +874,7 @@
     <value>lbl_logpercent</value>
   </data>
   <data name="&gt;&gt;lbl_logpercent.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;lbl_logpercent.Parent" xml:space="preserve">
     <value>tabTLogs</value>
@@ -925,7 +925,7 @@
     <value>BUT_log2kml</value>
   </data>
   <data name="&gt;&gt;BUT_log2kml.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_log2kml.Parent" xml:space="preserve">
     <value>tabTLogs</value>
@@ -976,7 +976,7 @@
     <value>BUT_playlog</value>
   </data>
   <data name="&gt;&gt;BUT_playlog.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_playlog.Parent" xml:space="preserve">
     <value>tabTLogs</value>
@@ -1003,7 +1003,7 @@
     <value>BUT_loadtelem</value>
   </data>
   <data name="&gt;&gt;BUT_loadtelem.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_loadtelem.Parent" xml:space="preserve">
     <value>tabTLogs</value>
@@ -1192,7 +1192,7 @@
     <value>lbl_hdop</value>
   </data>
   <data name="&gt;&gt;lbl_hdop.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;lbl_hdop.Parent" xml:space="preserve">
     <value>splitContainer1.Panel2</value>
@@ -1225,7 +1225,7 @@
     <value>lbl_sats</value>
   </data>
   <data name="&gt;&gt;lbl_sats.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;lbl_sats.Parent" xml:space="preserve">
     <value>splitContainer1.Panel2</value>
@@ -1255,7 +1255,7 @@
     <value>lbl_winddir</value>
   </data>
   <data name="&gt;&gt;lbl_winddir.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;lbl_winddir.Parent" xml:space="preserve">
     <value>splitContainer1.Panel2</value>
@@ -1285,7 +1285,7 @@
     <value>lbl_windvel</value>
   </data>
   <data name="&gt;&gt;lbl_windvel.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;lbl_windvel.Parent" xml:space="preserve">
     <value>splitContainer1.Panel2</value>
@@ -1457,7 +1457,7 @@
     <value>gMapControl1</value>
   </data>
   <data name="&gt;&gt;gMapControl1.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.myGMAP, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.myGMAP, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;gMapControl1.Parent" xml:space="preserve">
     <value>splitContainer1.Panel2</value>
@@ -1520,7 +1520,7 @@
     <value>TXT_lat</value>
   </data>
   <data name="&gt;&gt;TXT_lat.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;TXT_lat.Parent" xml:space="preserve">
     <value>panel1</value>
@@ -1577,7 +1577,7 @@
     <value>label1</value>
   </data>
   <data name="&gt;&gt;label1.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;label1.Parent" xml:space="preserve">
     <value>panel1</value>
@@ -1607,7 +1607,7 @@
     <value>TXT_long</value>
   </data>
   <data name="&gt;&gt;TXT_long.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;TXT_long.Parent" xml:space="preserve">
     <value>panel1</value>
@@ -1637,7 +1637,7 @@
     <value>TXT_alt</value>
   </data>
   <data name="&gt;&gt;TXT_alt.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;TXT_alt.Parent" xml:space="preserve">
     <value>panel1</value>
@@ -1838,7 +1838,7 @@
     <value>label6</value>
   </data>
   <data name="&gt;&gt;label6.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;label6.Parent" xml:space="preserve">
     <value>$this</value>
@@ -1916,6 +1916,6 @@
     <value>FlightData</value>
   </data>
   <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>System.Windows.Forms.MyUserControl, ArdupilotMegaPlanner, Version=1.1.4497.35992, Culture=neutral, PublicKeyToken=null</value>
+    <value>System.Windows.Forms.MyUserControl, ArdupilotMegaPlanner, Version=1.1.4498.22301, Culture=neutral, PublicKeyToken=null</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs
index bdf89907b3dcae1e96f3044748d2fe93dcc64131..0cfe83d42a1cd09fe9057a66e951a9fb280119e2 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs
@@ -22,7 +22,7 @@ using log4net;
 using SharpKml.Base;
 using SharpKml.Dom;
 using ArdupilotMega.Controls;
-
+using ArdupilotMega.Utilities;
 
 
 namespace ArdupilotMega.GCSViews
diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/Terminal.cs b/Tools/ArdupilotMegaPlanner/GCSViews/Terminal.cs
index 9dbeb0d323d219ea84d326288aaf922e60cb38ce..d1ba06794d9b23eeee1103b6546002dcac5b13ef 100644
--- a/Tools/ArdupilotMegaPlanner/GCSViews/Terminal.cs
+++ b/Tools/ArdupilotMegaPlanner/GCSViews/Terminal.cs
@@ -9,7 +9,7 @@ using System.Windows.Forms;
 using ArdupilotMega;
 using System.IO.Ports;
 using ArdupilotMega.Comms;
-
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega.GCSViews
 {
diff --git a/Tools/ArdupilotMegaPlanner/MAVLink.cs b/Tools/ArdupilotMegaPlanner/MAVLink.cs
index 485ef2a42afc9ea0332ae8a6a4f8d778e09df7eb..cdf63dbd26bbc8f5e9d69ca99d49be68376c7c98 100644
--- a/Tools/ArdupilotMegaPlanner/MAVLink.cs
+++ b/Tools/ArdupilotMegaPlanner/MAVLink.cs
@@ -13,6 +13,7 @@ using ArdupilotMega.Controls;
 using System.ComponentModel;
 using log4net;
 using ArdupilotMega.Comms;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega
 {
@@ -678,7 +679,7 @@ namespace ArdupilotMega
                             continue;
                         }
 
-                        log.Info(DateTime.Now.Millisecond + " got param " + (par.param_index) + " of " + (par.param_count - 2) + " name: " + paramID);
+                        log.Info(DateTime.Now.Millisecond + " got param " + (par.param_index) + " of " + (par.param_count - 2) + " name: " + paramID );
 
                         modifyParamForDisplay(true, paramID, ref par.param_value);
                         param[paramID] = (par.param_value);
@@ -1027,7 +1028,7 @@ namespace ArdupilotMega
 
         public void requestDatastream(byte id, byte hzrate)
         {
-            /*
+            
             double pps = 0;
             
             switch (id)
@@ -1118,7 +1119,7 @@ namespace ArdupilotMega
             {
                 return;
             }
-             */
+             
 
             log.InfoFormat("Request stream {0} at {1} hz", Enum.Parse(typeof(MAV_DATA_STREAM), id.ToString()), hzrate);
             getDatastream(id, hzrate);
@@ -1148,7 +1149,7 @@ namespace ArdupilotMega
             {
                 return true;
             }
-
+            
             return false;
 
         }
diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs
index 2ed0efa26bad7539d4673f169777de35e560cee2..92f48399ba27f50098e0d4e7c2c87541bb513a5e 100644
--- a/Tools/ArdupilotMegaPlanner/MainV2.cs
+++ b/Tools/ArdupilotMegaPlanner/MainV2.cs
@@ -2,9 +2,7 @@
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Configuration;
-using System.Data;
 using System.Drawing;
-using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.IO;
@@ -12,15 +10,13 @@ using System.Xml;
 using System.Collections;
 using System.Net;
 using System.Text.RegularExpressions;
-using System.Web;
 using System.Diagnostics;
 using System.Runtime.InteropServices;
 using System.Speech.Synthesis;
 using System.Globalization;
 using System.Threading;
-using System.Net.Sockets;
+using System.Net.Sockets;
 using ArdupilotMega.Utilities;
-using ArdupilotMega.Utilities.Constants;
 using IronPython.Hosting;
 using log4net;
 using ArdupilotMega.Controls;
@@ -129,8 +125,8 @@ namespace ArdupilotMega
         /// </summary>
         GCSViews.FlightData FlightData;
         GCSViews.FlightPlanner FlightPlanner;
-        GCSViews.Configuration Configuration;
-        //GCSViews.ConfigurationView.Configuration Configuration;
+        //GCSViews.Configuration Configuration;
+        GCSViews.ConfigurationView.Setup Configuration;
         GCSViews.Simulation Simulation;
         GCSViews.Firmware Firmware;
         GCSViews.Terminal Terminal;
@@ -428,23 +424,19 @@ namespace ArdupilotMega
                 catch { }
             }
 
-            Configuration = new GCSViews.Configuration();
-            //Configuration = new GCSViews.ConfigurationView.Configuration();
+            //Configuration = new GCSViews.Configuration();
+            Configuration = new GCSViews.ConfigurationView.Setup();
 
             UserControl temp = Configuration;
 
             ThemeManager.ApplyThemeTo(temp);
 
-            //temp.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
-
             temp.Location = new Point(0, 0);
 
             temp.Dock = DockStyle.Fill;
 
             temp.Size = MyView.Size;
 
-            //temp.Parent = MyView;
-
             MyView.Controls.Add(temp);
         }
 
@@ -1738,11 +1730,18 @@ namespace ArdupilotMega
 
         static void DoUpdateWorker_DoWork(object sender, Controls.ProgressWorkerEventArgs e)
         {
-            ((ProgressReporterDialogue)sender).UpdateProgressAndStatus(-1, "Getting Base URL");
-            MainV2.updateCheckMain((ProgressReporterDialogue)sender);
-
-            // TODO: Is this the right place?
-            ParameterMetaDataParser.GetParameterInformation();
+           // TODO: Is this the right place?
+           #region Fetch Parameter Meta Data
+           
+           var progressReporterDialogue = ((ProgressReporterDialogue) sender);
+           progressReporterDialogue.UpdateProgressAndStatus(-1, "Getting Updated Parameters");
+
+           ParameterMetaDataParser.GetParameterInformation();
+           
+           #endregion Fetch Parameter Meta Data
+
+           progressReporterDialogue.UpdateProgressAndStatus(-1, "Getting Base URL");
+           MainV2.updateCheckMain(progressReporterDialogue);
         }
 
         private static bool updateCheck(ProgressReporterDialogue frmProgressReporter, string baseurl, string subdir)
@@ -2043,7 +2042,7 @@ namespace ArdupilotMega
 
                 cfg.LoadXML("ArduCopterConfig.xml");
 
-                cfg.ShowDialog();
+                //cfg.ShowDialog();
 
                 return true;
             }
diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs
index 681968f35e4972e9d39275a0663969ccb6741f3f..f5422532e9dc2d884498ccdbd99a0c23b90da62e 100644
--- a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs
+++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs
@@ -26,6 +26,8 @@ using System.Xml;
 using log4net;
 using ZedGraph; // Graphs
 
+using ArdupilotMega.Utilities;
+
 using System.CodeDom.Compiler;
 
 namespace ArdupilotMega
diff --git a/Tools/ArdupilotMegaPlanner/Msi/wix.pdb b/Tools/ArdupilotMegaPlanner/Msi/wix.pdb
index a80ac1fd2da69224d03866940c09c8d5d87c5271..e2bd4a8c51e6596bf41da25015857ed84be7ef85 100644
Binary files a/Tools/ArdupilotMegaPlanner/Msi/wix.pdb and b/Tools/ArdupilotMegaPlanner/Msi/wix.pdb differ
diff --git a/Tools/ArdupilotMegaPlanner/Program.cs b/Tools/ArdupilotMegaPlanner/Program.cs
index c4051b1c2e13230454b664d3270150e6ea27b9dc..cefe48848fe029c76ded7acbabba45e39792c00f 100644
--- a/Tools/ArdupilotMegaPlanner/Program.cs
+++ b/Tools/ArdupilotMegaPlanner/Program.cs
@@ -60,7 +60,7 @@ namespace ArdupilotMega
 
         static void Application_Idle(object sender, EventArgs e)
         {
-            Console.Write("Idle\r");
+           // Console.Write("Idle\r");
         }
 
         static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
diff --git a/Tools/ArdupilotMegaPlanner/RAW_Sensor.cs b/Tools/ArdupilotMegaPlanner/RAW_Sensor.cs
index 33db53e8f2714db85a148f96b93fa9b26421a426..e36709761f51e738c3391294bc0a8d4d26bed079 100644
--- a/Tools/ArdupilotMegaPlanner/RAW_Sensor.cs
+++ b/Tools/ArdupilotMegaPlanner/RAW_Sensor.cs
@@ -214,10 +214,6 @@ namespace ArdupilotMega
                 {
                     if (sw != null)
                         sw.Close();
-
-                    MainV2.cs.ratesensors = 3; // hardcode 3 hz
-
-                    comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.RAW_SENSORS, MainV2.cs.ratesensors); // request raw sensor
                 }
                 catch { }
             }
diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs
index ba32270f0c54a29767b7d8a7f4ab324af8165ea1..d693b73eebfdaa29db6de503dfacc5722c022b64 100644
--- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs
+++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs
@@ -294,7 +294,6 @@
             // 
             // RS4
             // 
-            resources.ApplyResources(this.RS4, "RS4");
             this.RS4.FormattingEnabled = true;
             this.RS4.Items.AddRange(new object[] {
             resources.GetString("RS4.Items"),
@@ -318,12 +317,12 @@
             resources.GetString("RS4.Items18"),
             resources.GetString("RS4.Items19"),
             resources.GetString("RS4.Items20")});
+            resources.ApplyResources(this.RS4, "RS4");
             this.RS4.Name = "RS4";
             this.toolTip1.SetToolTip(this.RS4, resources.GetString("RS4.ToolTip"));
             // 
             // RS3
             // 
-            resources.ApplyResources(this.RS3, "RS3");
             this.RS3.FormattingEnabled = true;
             this.RS3.Items.AddRange(new object[] {
             resources.GetString("RS3.Items"),
@@ -356,12 +355,12 @@
             resources.GetString("RS3.Items27"),
             resources.GetString("RS3.Items28"),
             resources.GetString("RS3.Items29")});
+            resources.ApplyResources(this.RS3, "RS3");
             this.RS3.Name = "RS3";
             this.toolTip1.SetToolTip(this.RS3, resources.GetString("RS3.ToolTip"));
             // 
             // RS2
             // 
-            resources.ApplyResources(this.RS2, "RS2");
             this.RS2.FormattingEnabled = true;
             this.RS2.Items.AddRange(new object[] {
             resources.GetString("RS2.Items"),
@@ -374,12 +373,12 @@
             resources.GetString("RS2.Items7"),
             resources.GetString("RS2.Items8"),
             resources.GetString("RS2.Items9")});
+            resources.ApplyResources(this.RS2, "RS2");
             this.RS2.Name = "RS2";
             this.toolTip1.SetToolTip(this.RS2, resources.GetString("RS2.ToolTip"));
             // 
             // RS1
             // 
-            resources.ApplyResources(this.RS1, "RS1");
             this.RS1.FormattingEnabled = true;
             this.RS1.Items.AddRange(new object[] {
             resources.GetString("RS1.Items"),
@@ -391,6 +390,7 @@
             resources.GetString("RS1.Items6"),
             resources.GetString("RS1.Items7"),
             resources.GetString("RS1.Items8")});
+            resources.ApplyResources(this.RS1, "RS1");
             this.RS1.Name = "RS1";
             this.toolTip1.SetToolTip(this.RS1, resources.GetString("RS1.ToolTip"));
             // 
@@ -458,17 +458,16 @@
             // 
             // RS12
             // 
-            resources.ApplyResources(this.RS12, "RS12");
             this.RS12.FormattingEnabled = true;
             this.RS12.Items.AddRange(new object[] {
             resources.GetString("RS12.Items"),
             resources.GetString("RS12.Items1")});
+            resources.ApplyResources(this.RS12, "RS12");
             this.RS12.Name = "RS12";
             this.toolTip1.SetToolTip(this.RS12, resources.GetString("RS12.ToolTip"));
             // 
             // RS11
             // 
-            resources.ApplyResources(this.RS11, "RS11");
             this.RS11.FormattingEnabled = true;
             this.RS11.Items.AddRange(new object[] {
             resources.GetString("RS11.Items"),
@@ -481,12 +480,12 @@
             resources.GetString("RS11.Items7"),
             resources.GetString("RS11.Items8"),
             resources.GetString("RS11.Items9")});
+            resources.ApplyResources(this.RS11, "RS11");
             this.RS11.Name = "RS11";
             this.toolTip1.SetToolTip(this.RS11, resources.GetString("RS11.ToolTip"));
             // 
             // RS10
             // 
-            resources.ApplyResources(this.RS10, "RS10");
             this.RS10.FormattingEnabled = true;
             this.RS10.Items.AddRange(new object[] {
             resources.GetString("RS10.Items"),
@@ -508,6 +507,7 @@
             resources.GetString("RS10.Items16"),
             resources.GetString("RS10.Items17"),
             resources.GetString("RS10.Items18")});
+            resources.ApplyResources(this.RS10, "RS10");
             this.RS10.Name = "RS10";
             this.toolTip1.SetToolTip(this.RS10, resources.GetString("RS10.ToolTip"));
             // 
@@ -548,7 +548,6 @@
             // 
             // RS8
             // 
-            resources.ApplyResources(this.RS8, "RS8");
             this.RS8.FormattingEnabled = true;
             this.RS8.Items.AddRange(new object[] {
             resources.GetString("RS8.Items"),
@@ -560,11 +559,11 @@
             resources.GetString("RS8.Items6"),
             resources.GetString("RS8.Items7"),
             resources.GetString("RS8.Items8")});
+            resources.ApplyResources(this.RS8, "RS8");
             this.RS8.Name = "RS8";
             // 
             // RS9
             // 
-            resources.ApplyResources(this.RS9, "RS9");
             this.RS9.FormattingEnabled = true;
             this.RS9.Items.AddRange(new object[] {
             resources.GetString("RS9.Items"),
@@ -576,6 +575,7 @@
             resources.GetString("RS9.Items6"),
             resources.GetString("RS9.Items7"),
             resources.GetString("RS9.Items8")});
+            resources.ApplyResources(this.RS9, "RS9");
             this.RS9.Name = "RS9";
             // 
             // RS0
@@ -632,8 +632,8 @@
             // 
             // lbl_status
             // 
-            resources.ApplyResources(this.lbl_status, "lbl_status");
             this.lbl_status.BackColor = System.Drawing.Color.Transparent;
+            resources.ApplyResources(this.lbl_status, "lbl_status");
             this.lbl_status.Name = "lbl_status";
             // 
             // BUT_upload
diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx
index d13b7ec707a4a49f4e0e5ee433e46402c0e71594..94a14edc26212add4ddec72977b0315ec41d868e 100644
--- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx
+++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx
@@ -117,10 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="Progressbar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom, Left, Right</value>
-  </data>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="Progressbar.Location" type="System.Drawing.Point, System.Drawing">
     <value>12, 389</value>
@@ -767,9 +763,6 @@
   <data name="&gt;&gt;S7.ZOrder" xml:space="preserve">
     <value>51</value>
   </data>
-  <data name="RS7.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS7.Location" type="System.Drawing.Point, System.Drawing">
     <value>499, 287</value>
   </data>
@@ -795,9 +788,6 @@
   <data name="&gt;&gt;RS7.ZOrder" xml:space="preserve">
     <value>41</value>
   </data>
-  <data name="RS6.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS6.Location" type="System.Drawing.Point, System.Drawing">
     <value>499, 260</value>
   </data>
@@ -823,9 +813,6 @@
   <data name="&gt;&gt;RS6.ZOrder" xml:space="preserve">
     <value>42</value>
   </data>
-  <data name="RS5.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS5.Location" type="System.Drawing.Point, System.Drawing">
     <value>499, 233</value>
   </data>
@@ -851,9 +838,6 @@
   <data name="&gt;&gt;RS5.ZOrder" xml:space="preserve">
     <value>43</value>
   </data>
-  <data name="RS4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS4.Items" xml:space="preserve">
     <value>0</value>
   </data>
@@ -942,9 +926,6 @@
   <data name="&gt;&gt;RS4.ZOrder" xml:space="preserve">
     <value>44</value>
   </data>
-  <data name="RS3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS3.Items" xml:space="preserve">
     <value>1</value>
   </data>
@@ -1059,9 +1040,6 @@
   <data name="&gt;&gt;RS3.ZOrder" xml:space="preserve">
     <value>45</value>
   </data>
-  <data name="RS2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS2.Items" xml:space="preserve">
     <value>250</value>
   </data>
@@ -1116,9 +1094,6 @@
   <data name="&gt;&gt;RS2.ZOrder" xml:space="preserve">
     <value>46</value>
   </data>
-  <data name="RS1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS1.Items" xml:space="preserve">
     <value>115</value>
   </data>
@@ -1373,9 +1348,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;S12.ZOrder" xml:space="preserve">
     <value>27</value>
   </data>
-  <data name="RS12.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS12.Items" xml:space="preserve">
     <value>0</value>
   </data>
@@ -1407,9 +1379,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;RS12.ZOrder" xml:space="preserve">
     <value>17</value>
   </data>
-  <data name="RS11.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS11.Items" xml:space="preserve">
     <value>10</value>
   </data>
@@ -1465,9 +1434,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;RS11.ZOrder" xml:space="preserve">
     <value>18</value>
   </data>
-  <data name="RS10.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS10.Items" xml:space="preserve">
     <value>5</value>
   </data>
@@ -1655,9 +1621,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;S8.ZOrder" xml:space="preserve">
     <value>26</value>
   </data>
-  <data name="RS8.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS8.Items" xml:space="preserve">
     <value>902000</value>
   </data>
@@ -1706,9 +1669,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;RS8.ZOrder" xml:space="preserve">
     <value>16</value>
   </data>
-  <data name="RS9.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS9.Items" xml:space="preserve">
     <value>902000</value>
   </data>
@@ -1757,9 +1717,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;RS9.ZOrder" xml:space="preserve">
     <value>20</value>
   </data>
-  <data name="RS0.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RS0.Location" type="System.Drawing.Point, System.Drawing">
     <value>499, 99</value>
   </data>
@@ -1808,9 +1765,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label9.ZOrder" xml:space="preserve">
     <value>40</value>
   </data>
-  <data name="label10.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label10.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -1838,9 +1792,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label10.ZOrder" xml:space="preserve">
     <value>39</value>
   </data>
-  <data name="RTI.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="RTI.Location" type="System.Drawing.Point, System.Drawing">
     <value>543, 25</value>
   </data>
@@ -1937,9 +1888,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label12.ZOrder" xml:space="preserve">
     <value>34</value>
   </data>
-  <data name="BUT_savesettings.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom</value>
-  </data>
   <data name="BUT_savesettings.Enabled" type="System.Boolean, mscorlib">
     <value>False</value>
   </data>
@@ -1959,7 +1907,7 @@ which result in a valid packet CRC
     <value>BUT_savesettings</value>
   </data>
   <data name="&gt;&gt;BUT_savesettings.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_savesettings.Parent" xml:space="preserve">
     <value>$this</value>
@@ -1967,9 +1915,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;BUT_savesettings.ZOrder" xml:space="preserve">
     <value>49</value>
   </data>
-  <data name="BUT_getcurrent.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom</value>
-  </data>
   <data name="BUT_getcurrent.Location" type="System.Drawing.Point, System.Drawing">
     <value>253, 319</value>
   </data>
@@ -1986,7 +1931,7 @@ which result in a valid packet CRC
     <value>BUT_getcurrent</value>
   </data>
   <data name="&gt;&gt;BUT_getcurrent.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_getcurrent.Parent" xml:space="preserve">
     <value>$this</value>
@@ -1994,9 +1939,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;BUT_getcurrent.ZOrder" xml:space="preserve">
     <value>64</value>
   </data>
-  <data name="lbl_status.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom, Left, Right</value>
-  </data>
   <data name="lbl_status.Location" type="System.Drawing.Point, System.Drawing">
     <value>12, 361</value>
   </data>
@@ -2018,9 +1960,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;lbl_status.ZOrder" xml:space="preserve">
     <value>67</value>
   </data>
-  <data name="BUT_upload.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom</value>
-  </data>
   <data name="BUT_upload.Location" type="System.Drawing.Point, System.Drawing">
     <value>403, 319</value>
   </data>
@@ -2037,7 +1976,7 @@ which result in a valid packet CRC
     <value>BUT_upload</value>
   </data>
   <data name="&gt;&gt;BUT_upload.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_upload.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2061,7 +2000,7 @@ which result in a valid packet CRC
     <value>BUT_syncS2</value>
   </data>
   <data name="&gt;&gt;BUT_syncS2.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS2.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2085,7 +2024,7 @@ which result in a valid packet CRC
     <value>BUT_syncS3</value>
   </data>
   <data name="&gt;&gt;BUT_syncS3.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS3.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2109,7 +2048,7 @@ which result in a valid packet CRC
     <value>BUT_syncS5</value>
   </data>
   <data name="&gt;&gt;BUT_syncS5.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS5.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2120,6 +2059,7 @@ which result in a valid packet CRC
   <data name="label13.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="label13.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
@@ -2267,9 +2207,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label17.ZOrder" xml:space="preserve">
     <value>21</value>
   </data>
-  <data name="label20.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label20.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2300,9 +2237,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label20.ZOrder" xml:space="preserve">
     <value>11</value>
   </data>
-  <data name="label21.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label21.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2333,9 +2267,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label21.ZOrder" xml:space="preserve">
     <value>12</value>
   </data>
-  <data name="label22.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label22.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2366,9 +2297,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label22.ZOrder" xml:space="preserve">
     <value>13</value>
   </data>
-  <data name="label23.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label23.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2399,9 +2327,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label23.ZOrder" xml:space="preserve">
     <value>14</value>
   </data>
-  <data name="label24.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label24.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2432,9 +2357,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label24.ZOrder" xml:space="preserve">
     <value>15</value>
   </data>
-  <data name="label25.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label25.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2465,9 +2387,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label25.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="label26.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label26.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2498,9 +2417,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label26.ZOrder" xml:space="preserve">
     <value>4</value>
   </data>
-  <data name="label27.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label27.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2531,9 +2447,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label27.ZOrder" xml:space="preserve">
     <value>5</value>
   </data>
-  <data name="label28.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label28.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2564,9 +2477,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label28.ZOrder" xml:space="preserve">
     <value>6</value>
   </data>
-  <data name="label29.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label29.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2597,9 +2507,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label29.ZOrder" xml:space="preserve">
     <value>7</value>
   </data>
-  <data name="label30.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label30.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2630,9 +2537,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label30.ZOrder" xml:space="preserve">
     <value>8</value>
   </data>
-  <data name="label31.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label31.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2663,9 +2567,6 @@ which result in a valid packet CRC
   <data name="&gt;&gt;label31.ZOrder" xml:space="preserve">
     <value>9</value>
   </data>
-  <data name="label32.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
-  </data>
   <data name="label32.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -2715,7 +2616,7 @@ which result in a valid packet CRC
     <value>BUT_syncS8</value>
   </data>
   <data name="&gt;&gt;BUT_syncS8.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS8.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2742,7 +2643,7 @@ which result in a valid packet CRC
     <value>BUT_syncS9</value>
   </data>
   <data name="&gt;&gt;BUT_syncS9.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS9.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2769,7 +2670,7 @@ which result in a valid packet CRC
     <value>BUT_syncS10</value>
   </data>
   <data name="&gt;&gt;BUT_syncS10.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
   <data name="&gt;&gt;BUT_syncS10.Parent" xml:space="preserve">
     <value>$this</value>
@@ -2796,6 +2697,6 @@ which result in a valid packet CRC
     <value>_3DRradio</value>
   </data>
   <data name="&gt;&gt;$this.Type" xml:space="preserve">
-    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null</value>
+    <value>ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4498.26252, Culture=neutral, PublicKeyToken=null</value>
   </data>
 </root>
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/AviWriter.cs b/Tools/ArdupilotMegaPlanner/Utilities/AviWriter.cs
similarity index 96%
rename from Tools/ArdupilotMegaPlanner/AviWriter.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/AviWriter.cs
index 19f1d019c46334023fdab6533466466c5afc5ca6..79f27421ab2aa4ac7f70955f86263a3c53621bca 100644
--- a/Tools/ArdupilotMegaPlanner/AviWriter.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/AviWriter.cs
@@ -1,310 +1,310 @@
-using System;
-using System.Runtime.InteropServices;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using u32 = System.UInt32;
-using u16 = System.UInt16;
-using u8 = System.Byte;
-
-/// <summary>
-/// based off ftp://pserver.samba.org/pub/unpacked/picturebook/avi.c
-/// </summary>
-
-public class AviWriter
-{
-    /*
-avi debug: * LIST-root size:1233440040 pos:0
-avi debug:      + RIFF-AVI  size:1233440032 pos:0
-avi debug:      |    + LIST-hdrl size:310 pos:12
-avi debug:      |    |    + avih size:56 pos:24
-avi debug:      |    |    + LIST-strl size:124 pos:88
-avi debug:      |    |    |    + strh size:64 pos:100
-avi debug:      |    |    |    + strf size:40 pos:172
-avi debug:      |    |    + LIST-strl size:102 pos:220
-avi debug:      |    |    |    + strh size:64 pos:232
-avi debug:      |    |    |    + strf size:18 pos:304
-avi debug:      |    + JUNK size:1698 pos:330
-avi debug:      |    + LIST-movi size:1232936964 pos:2036
-avi debug:      |    + idx1 size:501024 pos:1232939008
-avi debug: AVIH: 2 stream, flags  HAS_INDEX 
-avi debug: stream[0] rate:1000000 scale:33333 samplesize:0
-avi debug: stream[0] video(MJPG) 1280x720 24bpp 30.000300fps
-     */
-
-
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct riff_head
-    {
-        [MarshalAs(
-                UnmanagedType.ByValArray,
-                SizeConst = 4)]
-        public char[] riff; /* "RIFF" */
-        public u32 size;
-        [MarshalAs(
-        UnmanagedType.ByValArray,
-        SizeConst = 4)]
-        public char[] avistr; /* "AVI " */
-    };
-
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct stream_head
-    { /* 56 bytes */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] strh; /* "strh" */
-        public u32 size;
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] vids; /* "vids" */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] codec; /* codec name */
-        public u32 flags;
-        public u32 reserved1;
-        public u32 initialframes;
-        public u32 scale; /* 1 */
-        public u32 rate; /* in frames per second */
-        public u32 start;
-        public u32 length; /* what units?? fps*nframes ?? */
-        public u32 suggested_bufsize;
-        public u32 quality; /* -1 */
-        public u32 samplesize;
-        public short l;
-        public short t;
-        public short r;
-        public short b;
-    };
-
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct avi_head
-    { /* 64 bytes */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] avih; /* "avih" */
-        public u32 size;
-        public u32 time; /* microsec per frame? 1e6 / fps ?? */
-        public u32 maxbytespersec;
-        public u32 reserved1;
-        public u32 flags;
-        public u32 nframes;
-        public u32 initialframes;
-        public u32 numstreams; /* 1 */
-        public u32 suggested_bufsize;
-        public u32 width;
-        public u32 height;
-        public u32 scale; /* 1 */
-        public u32 rate; /* fps */
-        public u32 start;
-        public u32 length; /* what units?? fps*nframes ?? */
-    };
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct list_head
-    { /* 12 bytes */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] list; /* "LIST" */
-        public u32 size;
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] type;
-    };
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct db_head
-    {
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] db; /* "00db" */
-        public u32 size;
-    };
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct frame_head
-    { /* 48 bytes */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] strf; /* "strf" */
-        public u32 size;
-        public UInt32 size2; /* repeat of previous field? */
-        public Int32 width;
-        public Int32 height;
-        public Int16 planes; /* 1 */
-        public Int16 bitcount; /* 24 */
-        [MarshalAs(
-UnmanagedType.ByValArray,
-SizeConst = 4)]
-        public char[] codec; /* MJPG */
-        public UInt32 unpackedsize; /* 3 * w * h */
-        public Int32 r1;
-        public Int32 r2;
-        public UInt32 clr_used;
-        public UInt32 clr_important;
-    };
-
-    [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct BITMAPINFOHEADER
-    {
-        public UInt32 biSize;
-        public Int32 biWidth;
-        public Int32 biHeight;
-        public Int16 biPlanes;
-        public Int16 biBitCount;
-        public UInt32 biCompression;
-        public UInt32 biSizeImage;
-        public Int32 biXPelsPerMeter;
-        public Int32 biYPelsPerMeter;
-        public UInt32 biClrUsed;
-        public UInt32 biClrImportant;
-    }
-
-
-
-    static int nframes;
-    static uint totalsize;
-    System.IO.BufferedStream fd;
-
-    public void avi_close()
-    {
-        if (fd != null)
-            fd.Close();
-    }
-
-    /* start writing an AVI file */
-    public void avi_start(string filename)
-    {
-        avi_close();
-
-        fd = new BufferedStream(File.Open(filename, FileMode.Create));
-
-        fd.Seek(2048,SeekOrigin.Begin);
-
-        nframes = 0;
-        totalsize = 0;
-    }
-
-
-    /* add a jpeg frame to an AVI file */
-    public void avi_add(u8[] buf, uint size)
-    {
-        Console.WriteLine(DateTime.Now.Millisecond + "avi frame");
-        db_head db = new db_head { db = "00dc".ToCharArray(), size = size };
-        fd.Write(StructureToByteArray(db), 0, Marshal.SizeOf(db));
-        fd.Write(buf, 0, (int)size);
-        if (size % 2 == 1)
-        {
-            size++;
-            fd.Seek(1, SeekOrigin.Current);
-        }
-        nframes++;
-        totalsize += size;
-    }
-
-    void strcpy(ref char[] to,string orig)
-    {
-        to = orig.ToCharArray();
-    }
-
-    /* finish writing the AVI file - filling in the header */
-    public void avi_end(int width, int height, int fps)
-    {
-        riff_head rh = new riff_head { riff = "RIFF".ToCharArray(), size = 0, avistr = "AVI ".ToCharArray() };
-        list_head lh1 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "hdrl".ToCharArray() };
-        avi_head ah = new avi_head();
-        list_head lh2 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "strl".ToCharArray() };
-        stream_head sh = new stream_head();
-        frame_head fh = new frame_head();
-        list_head junk = new list_head() { list = "JUNK".ToCharArray(), size = 0 };
-        list_head lh3 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "movi".ToCharArray() };
-
-        //bzero(&ah, sizeof(ah));
-        strcpy(ref ah.avih, "avih");
-        ah.time = (u32)(1e6 / fps);
-        ah.numstreams = 1;
-        //ah.scale = (u32)(1e6 / fps);
-        //ah.rate = (u32)fps;
-        //ah.length = (u32)(nframes);
-        ah.nframes = (u32)(nframes);
-        ah.width = (u32)width;
-        ah.height = (u32)height;
-        ah.flags = 0;
-        ah.suggested_bufsize = (u32)(3 * width * height * fps);
-        ah.maxbytespersec = (u32)(3 * width * height * fps);
-
-        //bzero(&sh, sizeof(sh));
-        strcpy(ref sh.strh, "strh");
-        strcpy(ref sh.vids, "vids");
-        strcpy(ref sh.codec, "MJPG");
-        sh.scale = (u32)(1e6 / fps);
-        sh.rate = (u32)1000000;
-        sh.length = (u32)(nframes);
-        sh.suggested_bufsize = (u32)(3 * width * height * fps);
-        unchecked
-        {
-            sh.quality = (uint)-1;
-        }
-
-        //bzero(&fh, sizeof(fh));
-        strcpy(ref fh.strf, "strf");
-        fh.width = width;
-        fh.height = height;
-        fh.planes = 1;
-        fh.bitcount = 24;
-        strcpy(ref fh.codec, "MJPG");
-        fh.unpackedsize = (u32)(3 * width * height);
-
-        rh.size = (u32)(Marshal.SizeOf(lh1) + Marshal.SizeOf(ah) + Marshal.SizeOf(lh2) + Marshal.SizeOf(sh) +
-            Marshal.SizeOf(fh) + Marshal.SizeOf(lh3) +
-            nframes * Marshal.SizeOf((new db_head())) +
-            totalsize);
-        lh1.size = (u32)(4 + Marshal.SizeOf(ah) + Marshal.SizeOf(lh2) + Marshal.SizeOf(sh) + Marshal.SizeOf(fh));
-        ah.size = (u32)(Marshal.SizeOf(ah) - 8);
-        lh2.size = (u32)(4 + Marshal.SizeOf(sh) + Marshal.SizeOf(fh));
-        sh.size = (u32)(Marshal.SizeOf(sh) - 8);
-        fh.size = (u32)(Marshal.SizeOf(fh) - 8);
-        fh.size2 = fh.size;
-        lh3.size = (u32)(4 +
-            nframes * Marshal.SizeOf((new db_head())) +
-            totalsize);
-        junk.size = 2048 - lh1.size - 12 - 12 - 12 - 4; // junk head, list head, rif head , 4
-        long pos = fd.Position;
-        fd.Seek(0, SeekOrigin.Begin);
-
-        fd.Write(StructureToByteArray(rh),0, Marshal.SizeOf(rh));
-        fd.Write(StructureToByteArray(lh1), 0, Marshal.SizeOf(lh1));
-        fd.Write(StructureToByteArray(ah), 0, Marshal.SizeOf(ah));
-        fd.Write(StructureToByteArray(lh2), 0, Marshal.SizeOf(lh2));
-        fd.Write(StructureToByteArray(sh), 0, Marshal.SizeOf(sh));
-        fd.Write(StructureToByteArray(fh), 0, Marshal.SizeOf(fh));
-        fd.Write(StructureToByteArray(junk), 0, Marshal.SizeOf(junk));
-        fd.Seek(2036, SeekOrigin.Begin);
-        fd.Write(StructureToByteArray(lh3), 0, Marshal.SizeOf(lh3));
-
-        fd.Seek(pos, SeekOrigin.Begin);
-    }
-
-    byte[] StructureToByteArray(object obj)
-    {
-
-        int len = Marshal.SizeOf(obj);
-
-        byte[] arr = new byte[len];
-
-        IntPtr ptr = Marshal.AllocHGlobal(len);
-
-        Marshal.StructureToPtr(obj, ptr, true);
-
-        Marshal.Copy(ptr, arr, 0, len);
-
-        Marshal.FreeHGlobal(ptr);
-
-        return arr;
-
-    }
+using System;
+using System.Runtime.InteropServices;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using u32 = System.UInt32;
+using u16 = System.UInt16;
+using u8 = System.Byte;
+
+/// <summary>
+/// based off ftp://pserver.samba.org/pub/unpacked/picturebook/avi.c
+/// </summary>
+
+public class AviWriter
+{
+    /*
+avi debug: * LIST-root size:1233440040 pos:0
+avi debug:      + RIFF-AVI  size:1233440032 pos:0
+avi debug:      |    + LIST-hdrl size:310 pos:12
+avi debug:      |    |    + avih size:56 pos:24
+avi debug:      |    |    + LIST-strl size:124 pos:88
+avi debug:      |    |    |    + strh size:64 pos:100
+avi debug:      |    |    |    + strf size:40 pos:172
+avi debug:      |    |    + LIST-strl size:102 pos:220
+avi debug:      |    |    |    + strh size:64 pos:232
+avi debug:      |    |    |    + strf size:18 pos:304
+avi debug:      |    + JUNK size:1698 pos:330
+avi debug:      |    + LIST-movi size:1232936964 pos:2036
+avi debug:      |    + idx1 size:501024 pos:1232939008
+avi debug: AVIH: 2 stream, flags  HAS_INDEX 
+avi debug: stream[0] rate:1000000 scale:33333 samplesize:0
+avi debug: stream[0] video(MJPG) 1280x720 24bpp 30.000300fps
+     */
+
+
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct riff_head
+    {
+        [MarshalAs(
+                UnmanagedType.ByValArray,
+                SizeConst = 4)]
+        public char[] riff; /* "RIFF" */
+        public u32 size;
+        [MarshalAs(
+        UnmanagedType.ByValArray,
+        SizeConst = 4)]
+        public char[] avistr; /* "AVI " */
+    };
+
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct stream_head
+    { /* 56 bytes */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] strh; /* "strh" */
+        public u32 size;
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] vids; /* "vids" */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] codec; /* codec name */
+        public u32 flags;
+        public u32 reserved1;
+        public u32 initialframes;
+        public u32 scale; /* 1 */
+        public u32 rate; /* in frames per second */
+        public u32 start;
+        public u32 length; /* what units?? fps*nframes ?? */
+        public u32 suggested_bufsize;
+        public u32 quality; /* -1 */
+        public u32 samplesize;
+        public short l;
+        public short t;
+        public short r;
+        public short b;
+    };
+
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct avi_head
+    { /* 64 bytes */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] avih; /* "avih" */
+        public u32 size;
+        public u32 time; /* microsec per frame? 1e6 / fps ?? */
+        public u32 maxbytespersec;
+        public u32 reserved1;
+        public u32 flags;
+        public u32 nframes;
+        public u32 initialframes;
+        public u32 numstreams; /* 1 */
+        public u32 suggested_bufsize;
+        public u32 width;
+        public u32 height;
+        public u32 scale; /* 1 */
+        public u32 rate; /* fps */
+        public u32 start;
+        public u32 length; /* what units?? fps*nframes ?? */
+    };
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct list_head
+    { /* 12 bytes */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] list; /* "LIST" */
+        public u32 size;
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] type;
+    };
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct db_head
+    {
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] db; /* "00db" */
+        public u32 size;
+    };
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct frame_head
+    { /* 48 bytes */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] strf; /* "strf" */
+        public u32 size;
+        public UInt32 size2; /* repeat of previous field? */
+        public Int32 width;
+        public Int32 height;
+        public Int16 planes; /* 1 */
+        public Int16 bitcount; /* 24 */
+        [MarshalAs(
+UnmanagedType.ByValArray,
+SizeConst = 4)]
+        public char[] codec; /* MJPG */
+        public UInt32 unpackedsize; /* 3 * w * h */
+        public Int32 r1;
+        public Int32 r2;
+        public UInt32 clr_used;
+        public UInt32 clr_important;
+    };
+
+    [StructLayout(LayoutKind.Sequential, Pack = 1)]
+    public struct BITMAPINFOHEADER
+    {
+        public UInt32 biSize;
+        public Int32 biWidth;
+        public Int32 biHeight;
+        public Int16 biPlanes;
+        public Int16 biBitCount;
+        public UInt32 biCompression;
+        public UInt32 biSizeImage;
+        public Int32 biXPelsPerMeter;
+        public Int32 biYPelsPerMeter;
+        public UInt32 biClrUsed;
+        public UInt32 biClrImportant;
+    }
+
+
+
+    static int nframes;
+    static uint totalsize;
+    System.IO.BufferedStream fd;
+
+    public void avi_close()
+    {
+        if (fd != null)
+            fd.Close();
+    }
+
+    /* start writing an AVI file */
+    public void avi_start(string filename)
+    {
+        avi_close();
+
+        fd = new BufferedStream(File.Open(filename, FileMode.Create));
+
+        fd.Seek(2048,SeekOrigin.Begin);
+
+        nframes = 0;
+        totalsize = 0;
+    }
+
+
+    /* add a jpeg frame to an AVI file */
+    public void avi_add(u8[] buf, uint size)
+    {
+        Console.WriteLine(DateTime.Now.Millisecond + "avi frame");
+        db_head db = new db_head { db = "00dc".ToCharArray(), size = size };
+        fd.Write(StructureToByteArray(db), 0, Marshal.SizeOf(db));
+        fd.Write(buf, 0, (int)size);
+        if (size % 2 == 1)
+        {
+            size++;
+            fd.Seek(1, SeekOrigin.Current);
+        }
+        nframes++;
+        totalsize += size;
+    }
+
+    void strcpy(ref char[] to,string orig)
+    {
+        to = orig.ToCharArray();
+    }
+
+    /* finish writing the AVI file - filling in the header */
+    public void avi_end(int width, int height, int fps)
+    {
+        riff_head rh = new riff_head { riff = "RIFF".ToCharArray(), size = 0, avistr = "AVI ".ToCharArray() };
+        list_head lh1 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "hdrl".ToCharArray() };
+        avi_head ah = new avi_head();
+        list_head lh2 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "strl".ToCharArray() };
+        stream_head sh = new stream_head();
+        frame_head fh = new frame_head();
+        list_head junk = new list_head() { list = "JUNK".ToCharArray(), size = 0 };
+        list_head lh3 = new list_head { list = "LIST".ToCharArray(), size = 0, type = "movi".ToCharArray() };
+
+        //bzero(&ah, sizeof(ah));
+        strcpy(ref ah.avih, "avih");
+        ah.time = (u32)(1e6 / fps);
+        ah.numstreams = 1;
+        //ah.scale = (u32)(1e6 / fps);
+        //ah.rate = (u32)fps;
+        //ah.length = (u32)(nframes);
+        ah.nframes = (u32)(nframes);
+        ah.width = (u32)width;
+        ah.height = (u32)height;
+        ah.flags = 0;
+        ah.suggested_bufsize = (u32)(3 * width * height * fps);
+        ah.maxbytespersec = (u32)(3 * width * height * fps);
+
+        //bzero(&sh, sizeof(sh));
+        strcpy(ref sh.strh, "strh");
+        strcpy(ref sh.vids, "vids");
+        strcpy(ref sh.codec, "MJPG");
+        sh.scale = (u32)(1e6 / fps);
+        sh.rate = (u32)1000000;
+        sh.length = (u32)(nframes);
+        sh.suggested_bufsize = (u32)(3 * width * height * fps);
+        unchecked
+        {
+            sh.quality = (uint)-1;
+        }
+
+        //bzero(&fh, sizeof(fh));
+        strcpy(ref fh.strf, "strf");
+        fh.width = width;
+        fh.height = height;
+        fh.planes = 1;
+        fh.bitcount = 24;
+        strcpy(ref fh.codec, "MJPG");
+        fh.unpackedsize = (u32)(3 * width * height);
+
+        rh.size = (u32)(Marshal.SizeOf(lh1) + Marshal.SizeOf(ah) + Marshal.SizeOf(lh2) + Marshal.SizeOf(sh) +
+            Marshal.SizeOf(fh) + Marshal.SizeOf(lh3) +
+            nframes * Marshal.SizeOf((new db_head())) +
+            totalsize);
+        lh1.size = (u32)(4 + Marshal.SizeOf(ah) + Marshal.SizeOf(lh2) + Marshal.SizeOf(sh) + Marshal.SizeOf(fh));
+        ah.size = (u32)(Marshal.SizeOf(ah) - 8);
+        lh2.size = (u32)(4 + Marshal.SizeOf(sh) + Marshal.SizeOf(fh));
+        sh.size = (u32)(Marshal.SizeOf(sh) - 8);
+        fh.size = (u32)(Marshal.SizeOf(fh) - 8);
+        fh.size2 = fh.size;
+        lh3.size = (u32)(4 +
+            nframes * Marshal.SizeOf((new db_head())) +
+            totalsize);
+        junk.size = 2048 - lh1.size - 12 - 12 - 12 - 4; // junk head, list head, rif head , 4
+        long pos = fd.Position;
+        fd.Seek(0, SeekOrigin.Begin);
+
+        fd.Write(StructureToByteArray(rh),0, Marshal.SizeOf(rh));
+        fd.Write(StructureToByteArray(lh1), 0, Marshal.SizeOf(lh1));
+        fd.Write(StructureToByteArray(ah), 0, Marshal.SizeOf(ah));
+        fd.Write(StructureToByteArray(lh2), 0, Marshal.SizeOf(lh2));
+        fd.Write(StructureToByteArray(sh), 0, Marshal.SizeOf(sh));
+        fd.Write(StructureToByteArray(fh), 0, Marshal.SizeOf(fh));
+        fd.Write(StructureToByteArray(junk), 0, Marshal.SizeOf(junk));
+        fd.Seek(2036, SeekOrigin.Begin);
+        fd.Write(StructureToByteArray(lh3), 0, Marshal.SizeOf(lh3));
+
+        fd.Seek(pos, SeekOrigin.Begin);
+    }
+
+    byte[] StructureToByteArray(object obj)
+    {
+
+        int len = Marshal.SizeOf(obj);
+
+        byte[] arr = new byte[len];
+
+        IntPtr ptr = Marshal.AllocHGlobal(len);
+
+        Marshal.StructureToPtr(obj, ptr, true);
+
+        Marshal.Copy(ptr, arr, 0, len);
+
+        Marshal.FreeHGlobal(ptr);
+
+        return arr;
+
+    }
 }
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/Capture.cs b/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs
similarity index 96%
rename from Tools/ArdupilotMegaPlanner/Capture.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/Capture.cs
index 44775cb5ebe22787281f72337f00429951a9f630..032a061c3a2ab7c31844385ceddf95a3ee831c9c 100644
--- a/Tools/ArdupilotMegaPlanner/Capture.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs
@@ -1,498 +1,498 @@
-/****************************************************************************
-While the underlying libraries are covered by LGPL, this sample is released 
-as public domain.  It is distributed in the hope that it will be useful, but 
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
-or FITNESS FOR A PARTICULAR PURPOSE.  
-*****************************************************************************/
-
-using System;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.Collections;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Diagnostics;
-using System.Collections.Generic;
-
-using DirectShowLib;
-
-
-namespace WebCamService
-{
-    public delegate void CamImage(Image camimage);
-
-    /// <summary> Summary description for MainForm. </summary>
-    public class Capture : ISampleGrabberCB, IDisposable
-    {
-        #region Member variables
-
-        /// <summary> graph builder interface. </summary>
-        private IFilterGraph2 m_FilterGraph = null;
-        private IMediaControl m_mediaCtrl = null;
-
-        /// <summary> so we can wait for the async job to finish </summary>
-        private ManualResetEvent m_PictureReady = null;
-
-        /// <summary> Set by async routine when it captures an image </summary>
-        private volatile bool m_bGotOne = false;
-
-        /// <summary> Indicates the status of the graph </summary>
-        private bool m_bRunning = false;
-
-        /// <summary> Dimensions of the image, calculated once in constructor. </summary>
-        private IntPtr m_handle = IntPtr.Zero;
-        private int m_videoWidth;
-        private int m_videoHeight;
-        private int m_stride;
-        public int m_Dropped = 0;
-
-        public Image image = null;
-        IntPtr ip = IntPtr.Zero;
-
-        public event CamImage camimage;
-        System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
-
-        #endregion
-
-        #region API
-
-        [DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory")]
-        private static extern void CopyMemory(IntPtr Destination, IntPtr Source, int Length);
-
-        #endregion
-
-        public Capture()
-        {
-        }
-
-        /// <summary> Use capture with selected media caps</summary>
-        public Capture(int iDeviceNum, AMMediaType media)
-        {
-            DsDevice[] capDevices;
-
-            // Get the collection of video devices
-            capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
-
-            if (iDeviceNum + 1 > capDevices.Length)
-            {
-                throw new Exception("No video capture devices found at that index!");
-            }
-
-            try
-            {
-                // Set up the capture graph
-                SetupGraph(capDevices[iDeviceNum], media);
-
-                // tell the callback to ignore new images
-                m_PictureReady = new ManualResetEvent(false);
-                m_bGotOne = true;
-                m_bRunning = false;
-
-                timer1.Interval = 1000 / 15; // 15 fps
-                timer1.Tick += new EventHandler(timer1_Tick);
-                timer1.Start();
-
-            }
-            catch
-            {
-                Dispose();
-                throw;
-            }
-        }
-        /// <summary> release everything. </summary>
-        public void Dispose()
-        {
-            timer1.Stop();
-            if (camimage != null)
-            {
-                camimage(null); // clear last pic
-            }
-            CloseInterfaces();
-            if (m_PictureReady != null)
-            {
-                m_PictureReady.Close();
-                m_PictureReady = null;
-            }
-        }
-        // Destructor
-        ~Capture()
-        {
-            Dispose();
-        }
-
-        public int Width
-        {
-            get
-            {
-                return m_videoWidth;
-            }
-        }
-        public int Height
-        {
-            get
-            {
-                return m_videoHeight;
-            }
-        }
-        public int Stride
-        {
-            get
-            {
-                return m_stride;
-            }
-        }
-        /// <summary> capture the next image </summary>
-        public IntPtr GetBitMap()
-        {
-            if (m_handle == IntPtr.Zero)
-                m_handle = Marshal.AllocCoTaskMem(m_stride * m_videoHeight);
-
-            try
-            {
-                // get ready to wait for new image
-                m_PictureReady.Reset();
-                m_bGotOne = false;
-
-                // If the graph hasn't been started, start it.
-                Start();
-
-                // Start waiting
-                if ( ! m_PictureReady.WaitOne(5000, false) )
-                {
-                    throw new Exception("Timeout waiting to get picture");
-                }
-                //Pause(); //- we are effectivly pulling at 15 fps, so no need to pause
-            }
-            catch
-            {
-                Marshal.FreeCoTaskMem(m_handle);
-                throw;
-            }
-	
-            // Got one
-            return m_handle;
-        }
-        // Start the capture graph
-        public void Start()
-        {
-            if (!m_bRunning)
-            {
-                int hr = m_mediaCtrl.Run();
-                DsError.ThrowExceptionForHR( hr );
-
-                m_bRunning = true;
-            }
-        }
-        // Pause the capture graph.
-        // Running the graph takes up a lot of resources.  Pause it when it
-        // isn't needed.
-        public void Pause()
-        {
-            if (m_bRunning)
-            {
-                int hr = m_mediaCtrl.Pause();
-                DsError.ThrowExceptionForHR( hr );
-
-                m_bRunning = false;
-            }
-        }
-
-        public static List<string> getDevices()
-        {
-            List<string> list = new List<string>();
-            DsDevice[] capDevices;
-
-            // Get the collection of video devices
-            capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
-
-            foreach (DsDevice dev in capDevices)
-            {
-                list.Add(dev.Name);
-            }
-
-            return list;
-        }
-
-        public bool showhud = true;
-
-        void timer1_Tick(object sender, EventArgs e)
-        {
-            try
-            {
-                ip = this.GetBitMap();
-                image = new Bitmap(this.Width, this.Height, this.Stride, PixelFormat.Format24bppRgb, ip);
-                image.RotateFlip(RotateFlipType.RotateNoneFlipY);
-                if (camimage != null)
-                {
-                    camimage(image);
-                }
-            }
-            catch { Console.WriteLine("Grab bmp failed"); timer1.Enabled = false; this.CloseInterfaces(); System.Windows.Forms.CustomMessageBox.Show("Problem with capture device, grabbing frame took longer than 5 sec"); }
-        }
-
-        /// <summary> build the capture graph for grabber. </summary>
-        private void SetupGraph(DsDevice dev, AMMediaType media)
-        {
-            int hr;
-
-            ISampleGrabber sampGrabber = null;
-            IBaseFilter capFilter = null;
-            ICaptureGraphBuilder2 capGraph = null;
-
-            // Get the graphbuilder object
-            m_FilterGraph = (IFilterGraph2) new FilterGraph();
-            m_mediaCtrl = m_FilterGraph as IMediaControl;
-            try
-            {
-                // Get the ICaptureGraphBuilder2
-                capGraph = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
-
-                // Get the SampleGrabber interface
-                sampGrabber = (ISampleGrabber) new SampleGrabber();
-
-                // Start building the graph
-                hr = capGraph.SetFiltergraph( m_FilterGraph );
-                DsError.ThrowExceptionForHR( hr );
-
-                // Add the video device
-                hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, "Video input", out capFilter);
-                DsError.ThrowExceptionForHR( hr );
-
-                // add video crossbar
-                // thanks to Andrew Fernie - this is to get tv tuner cards working
-                IAMCrossbar crossbar = null;
-                object o;
-
-                hr = capGraph.FindInterface(PinCategory.Capture, MediaType.Video, capFilter, typeof(IAMCrossbar).GUID, out o);
-                if (hr >= 0)
-                {
-                    crossbar = (IAMCrossbar)o;
-                    int oPin, iPin;
-                    int ovLink, ivLink;
-                    ovLink = ivLink = 0;
-
-                    crossbar.get_PinCounts(out oPin, out iPin);
-                    int pIdxRel;
-                    PhysicalConnectorType tp;
-                    for (int i = 0; i < iPin; i++)
-                    {
-                        crossbar.get_CrossbarPinInfo(true, i, out pIdxRel, out tp);
-                        if (tp == PhysicalConnectorType.Video_Composite) ivLink = i;
-                    }
-
-                    for (int i = 0; i < oPin; i++)
-                    {
-                        crossbar.get_CrossbarPinInfo(false, i, out pIdxRel, out tp);
-                        if (tp == PhysicalConnectorType.Video_VideoDecoder) ovLink = i;
-                    }
-
-                    try
-                    {
-                        crossbar.Route(ovLink, ivLink);
-                        o = null;
-                    }
-
-                    catch
-                    {
-                        throw new Exception("Failed to get IAMCrossbar");
-                    }
-                }
-
-                //add AVI Decompressor
-                IBaseFilter pAVIDecompressor = (IBaseFilter)new AVIDec();
-                hr = m_FilterGraph.AddFilter(pAVIDecompressor, "AVI Decompressor");
-                DsError.ThrowExceptionForHR(hr);
-
-                //
-                IBaseFilter baseGrabFlt = (IBaseFilter)	sampGrabber;
-                ConfigureSampleGrabber(sampGrabber);
-
-                // Add the frame grabber to the graph
-                hr = m_FilterGraph.AddFilter( baseGrabFlt, "Ds.NET Grabber" );
-                DsError.ThrowExceptionForHR( hr );
-
-                SetConfigParms(capGraph, capFilter, media);
-
-                hr = capGraph.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, pAVIDecompressor, baseGrabFlt);
-                if (hr < 0)
-                {
-                    hr = capGraph.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, null, baseGrabFlt);
-                }
-
-                DsError.ThrowExceptionForHR( hr );
-
-                SaveSizeInfo(sampGrabber);
-            }
-            finally
-            {
-                if (capFilter != null)
-                {
-                    Marshal.ReleaseComObject(capFilter);
-                    capFilter = null;
-                }
-                if (sampGrabber != null)
-                {
-                    Marshal.ReleaseComObject(sampGrabber);
-                    sampGrabber = null;
-                }
-                if (capGraph != null)
-                {
-                    Marshal.ReleaseComObject(capGraph);
-                    capGraph = null;
-                }
-            }
-        }
-
-        private void SaveSizeInfo(ISampleGrabber sampGrabber)
-        {
-            int hr;
-
-            // Get the media type from the SampleGrabber
-            AMMediaType media = new AMMediaType();
-            hr = sampGrabber.GetConnectedMediaType( media );
-            DsError.ThrowExceptionForHR( hr );
-
-            if( (media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero) )
-            {
-                throw new NotSupportedException( "Unknown Grabber Media Format" );
-            }
-
-            // Grab the size info
-            VideoInfoHeader videoInfoHeader = (VideoInfoHeader) Marshal.PtrToStructure( media.formatPtr, typeof(VideoInfoHeader) );
-            m_videoWidth = videoInfoHeader.BmiHeader.Width;
-            m_videoHeight = videoInfoHeader.BmiHeader.Height;
-            m_stride = m_videoWidth * (videoInfoHeader.BmiHeader.BitCount / 8);
-
-            DsUtils.FreeAMMediaType(media);
-            media = null;
-        }
-        private void ConfigureSampleGrabber(ISampleGrabber sampGrabber)
-        {
-            AMMediaType media;
-            int hr;
-
-            // Set the media type to Video/RBG24
-            media = new AMMediaType();
-            media.majorType	= MediaType.Video;
-            media.subType	= MediaSubType.RGB24;
-            media.formatType = FormatType.VideoInfo;
-            hr = sampGrabber.SetMediaType( media );
-            DsError.ThrowExceptionForHR( hr );
-
-            DsUtils.FreeAMMediaType(media);
-            media = null;
-
-            // Configure the samplegrabber
-            hr = sampGrabber.SetCallback( this, 1 );
-            DsError.ThrowExceptionForHR( hr );
-        }
-
-        // Set the Framerate, and video size
-        private void SetConfigParms(ICaptureGraphBuilder2 capGraph, IBaseFilter capFilter, AMMediaType media)
-        {
-            int hr;
-            object o;
-
-            // Find the stream config interface
-            hr = capGraph.FindInterface(
-                PinCategory.Capture, MediaType.Video, capFilter, typeof(IAMStreamConfig).GUID, out o );
-
-            IAMStreamConfig videoStreamConfig = o as IAMStreamConfig;
-            if (videoStreamConfig == null)
-            {
-                throw new Exception("Failed to get IAMStreamConfig");
-            }           
-
-            // Set the new format
-            hr = videoStreamConfig.SetFormat( media );
-            DsError.ThrowExceptionForHR( hr );
-
-            DsUtils.FreeAMMediaType(media);
-            media = null;
-        }
-
-        /// <summary> Shut down capture </summary>
-        private void CloseInterfaces()
-        {
-            int hr;
-
-            try
-            {
-                if( m_mediaCtrl != null )
-                {
-                    // Stop the graph
-                    hr = m_mediaCtrl.Stop();
-                    m_bRunning = false;
-                }
-            }
-            catch (Exception ex)
-            {
-                Debug.WriteLine(ex);
-            }
-
-            if (m_FilterGraph != null)
-            {
-                Marshal.ReleaseComObject(m_FilterGraph);
-                m_FilterGraph = null;
-            }
-        }
-
-        /// <summary> sample callback, NOT USED. </summary>
-        int ISampleGrabberCB.SampleCB( double SampleTime, IMediaSample pSample )
-        {
-            if (!m_bGotOne)
-            {
-                // Set bGotOne to prevent further calls until we
-                // request a new bitmap.
-                m_bGotOne = true;
-                IntPtr pBuffer;
-
-                pSample.GetPointer(out pBuffer);
-                int iBufferLen = pSample.GetSize();
-
-                if (pSample.GetSize() > m_stride * m_videoHeight)
-                {
-                    throw new Exception("Buffer is wrong size");
-                }
-
-                CopyMemory(m_handle, pBuffer, m_stride * m_videoHeight);
-
-                // Picture is ready.
-                m_PictureReady.Set();
-            }
-
-            Marshal.ReleaseComObject(pSample);
-            return 0;
-        }
-
-        /// <summary> buffer callback, COULD BE FROM FOREIGN THREAD. </summary>
-        int ISampleGrabberCB.BufferCB( double SampleTime, IntPtr pBuffer, int BufferLen )
-        {
-            if (!m_bGotOne)
-            {
-                // The buffer should be long enought
-                if(BufferLen <= m_stride * m_videoHeight)
-                {
-                    // Copy the frame to the buffer
-                    CopyMemory(m_handle, pBuffer, m_stride * m_videoHeight);
-                }
-                else
-                {
-                    throw new Exception("Buffer is wrong size");
-                }
-
-                // Set bGotOne to prevent further calls until we
-                // request a new bitmap.
-                m_bGotOne = true;
-
-                // Picture is ready.
-                m_PictureReady.Set();
-            }
-            else
-            {
-                m_Dropped++;
-            }
-            return 0;
-        }
-    }
-}
+/****************************************************************************
+While the underlying libraries are covered by LGPL, this sample is released 
+as public domain.  It is distributed in the hope that it will be useful, but 
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+or FITNESS FOR A PARTICULAR PURPOSE.  
+*****************************************************************************/
+
+using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Collections;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Diagnostics;
+using System.Collections.Generic;
+
+using DirectShowLib;
+
+
+namespace WebCamService
+{
+    public delegate void CamImage(Image camimage);
+
+    /// <summary> Summary description for MainForm. </summary>
+    public class Capture : ISampleGrabberCB, IDisposable
+    {
+        #region Member variables
+
+        /// <summary> graph builder interface. </summary>
+        private IFilterGraph2 m_FilterGraph = null;
+        private IMediaControl m_mediaCtrl = null;
+
+        /// <summary> so we can wait for the async job to finish </summary>
+        private ManualResetEvent m_PictureReady = null;
+
+        /// <summary> Set by async routine when it captures an image </summary>
+        private volatile bool m_bGotOne = false;
+
+        /// <summary> Indicates the status of the graph </summary>
+        private bool m_bRunning = false;
+
+        /// <summary> Dimensions of the image, calculated once in constructor. </summary>
+        private IntPtr m_handle = IntPtr.Zero;
+        private int m_videoWidth;
+        private int m_videoHeight;
+        private int m_stride;
+        public int m_Dropped = 0;
+
+        public Image image = null;
+        IntPtr ip = IntPtr.Zero;
+
+        public event CamImage camimage;
+        System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
+
+        #endregion
+
+        #region API
+
+        [DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory")]
+        private static extern void CopyMemory(IntPtr Destination, IntPtr Source, int Length);
+
+        #endregion
+
+        public Capture()
+        {
+        }
+
+        /// <summary> Use capture with selected media caps</summary>
+        public Capture(int iDeviceNum, AMMediaType media)
+        {
+            DsDevice[] capDevices;
+
+            // Get the collection of video devices
+            capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
+
+            if (iDeviceNum + 1 > capDevices.Length)
+            {
+                throw new Exception("No video capture devices found at that index!");
+            }
+
+            try
+            {
+                // Set up the capture graph
+                SetupGraph(capDevices[iDeviceNum], media);
+
+                // tell the callback to ignore new images
+                m_PictureReady = new ManualResetEvent(false);
+                m_bGotOne = true;
+                m_bRunning = false;
+
+                timer1.Interval = 1000 / 15; // 15 fps
+                timer1.Tick += new EventHandler(timer1_Tick);
+                timer1.Start();
+
+            }
+            catch
+            {
+                Dispose();
+                throw;
+            }
+        }
+        /// <summary> release everything. </summary>
+        public void Dispose()
+        {
+            timer1.Stop();
+            if (camimage != null)
+            {
+                camimage(null); // clear last pic
+            }
+            CloseInterfaces();
+            if (m_PictureReady != null)
+            {
+                m_PictureReady.Close();
+                m_PictureReady = null;
+            }
+        }
+        // Destructor
+        ~Capture()
+        {
+            Dispose();
+        }
+
+        public int Width
+        {
+            get
+            {
+                return m_videoWidth;
+            }
+        }
+        public int Height
+        {
+            get
+            {
+                return m_videoHeight;
+            }
+        }
+        public int Stride
+        {
+            get
+            {
+                return m_stride;
+            }
+        }
+        /// <summary> capture the next image </summary>
+        public IntPtr GetBitMap()
+        {
+            if (m_handle == IntPtr.Zero)
+                m_handle = Marshal.AllocCoTaskMem(m_stride * m_videoHeight);
+
+            try
+            {
+                // get ready to wait for new image
+                m_PictureReady.Reset();
+                m_bGotOne = false;
+
+                // If the graph hasn't been started, start it.
+                Start();
+
+                // Start waiting
+                if ( ! m_PictureReady.WaitOne(5000, false) )
+                {
+                    throw new Exception("Timeout waiting to get picture");
+                }
+                //Pause(); //- we are effectivly pulling at 15 fps, so no need to pause
+            }
+            catch
+            {
+                Marshal.FreeCoTaskMem(m_handle);
+                throw;
+            }
+	
+            // Got one
+            return m_handle;
+        }
+        // Start the capture graph
+        public void Start()
+        {
+            if (!m_bRunning)
+            {
+                int hr = m_mediaCtrl.Run();
+                DsError.ThrowExceptionForHR( hr );
+
+                m_bRunning = true;
+            }
+        }
+        // Pause the capture graph.
+        // Running the graph takes up a lot of resources.  Pause it when it
+        // isn't needed.
+        public void Pause()
+        {
+            if (m_bRunning)
+            {
+                int hr = m_mediaCtrl.Pause();
+                DsError.ThrowExceptionForHR( hr );
+
+                m_bRunning = false;
+            }
+        }
+
+        public static List<string> getDevices()
+        {
+            List<string> list = new List<string>();
+            DsDevice[] capDevices;
+
+            // Get the collection of video devices
+            capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
+
+            foreach (DsDevice dev in capDevices)
+            {
+                list.Add(dev.Name);
+            }
+
+            return list;
+        }
+
+        public bool showhud = true;
+
+        void timer1_Tick(object sender, EventArgs e)
+        {
+            try
+            {
+                ip = this.GetBitMap();
+                image = new Bitmap(this.Width, this.Height, this.Stride, PixelFormat.Format24bppRgb, ip);
+                image.RotateFlip(RotateFlipType.RotateNoneFlipY);
+                if (camimage != null)
+                {
+                    camimage(image);
+                }
+            }
+            catch { Console.WriteLine("Grab bmp failed"); timer1.Enabled = false; this.CloseInterfaces(); System.Windows.Forms.CustomMessageBox.Show("Problem with capture device, grabbing frame took longer than 5 sec"); }
+        }
+
+        /// <summary> build the capture graph for grabber. </summary>
+        private void SetupGraph(DsDevice dev, AMMediaType media)
+        {
+            int hr;
+
+            ISampleGrabber sampGrabber = null;
+            IBaseFilter capFilter = null;
+            ICaptureGraphBuilder2 capGraph = null;
+
+            // Get the graphbuilder object
+            m_FilterGraph = (IFilterGraph2) new FilterGraph();
+            m_mediaCtrl = m_FilterGraph as IMediaControl;
+            try
+            {
+                // Get the ICaptureGraphBuilder2
+                capGraph = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
+
+                // Get the SampleGrabber interface
+                sampGrabber = (ISampleGrabber) new SampleGrabber();
+
+                // Start building the graph
+                hr = capGraph.SetFiltergraph( m_FilterGraph );
+                DsError.ThrowExceptionForHR( hr );
+
+                // Add the video device
+                hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, null, "Video input", out capFilter);
+                DsError.ThrowExceptionForHR( hr );
+
+                // add video crossbar
+                // thanks to Andrew Fernie - this is to get tv tuner cards working
+                IAMCrossbar crossbar = null;
+                object o;
+
+                hr = capGraph.FindInterface(PinCategory.Capture, MediaType.Video, capFilter, typeof(IAMCrossbar).GUID, out o);
+                if (hr >= 0)
+                {
+                    crossbar = (IAMCrossbar)o;
+                    int oPin, iPin;
+                    int ovLink, ivLink;
+                    ovLink = ivLink = 0;
+
+                    crossbar.get_PinCounts(out oPin, out iPin);
+                    int pIdxRel;
+                    PhysicalConnectorType tp;
+                    for (int i = 0; i < iPin; i++)
+                    {
+                        crossbar.get_CrossbarPinInfo(true, i, out pIdxRel, out tp);
+                        if (tp == PhysicalConnectorType.Video_Composite) ivLink = i;
+                    }
+
+                    for (int i = 0; i < oPin; i++)
+                    {
+                        crossbar.get_CrossbarPinInfo(false, i, out pIdxRel, out tp);
+                        if (tp == PhysicalConnectorType.Video_VideoDecoder) ovLink = i;
+                    }
+
+                    try
+                    {
+                        crossbar.Route(ovLink, ivLink);
+                        o = null;
+                    }
+
+                    catch
+                    {
+                        throw new Exception("Failed to get IAMCrossbar");
+                    }
+                }
+
+                //add AVI Decompressor
+                IBaseFilter pAVIDecompressor = (IBaseFilter)new AVIDec();
+                hr = m_FilterGraph.AddFilter(pAVIDecompressor, "AVI Decompressor");
+                DsError.ThrowExceptionForHR(hr);
+
+                //
+                IBaseFilter baseGrabFlt = (IBaseFilter)	sampGrabber;
+                ConfigureSampleGrabber(sampGrabber);
+
+                // Add the frame grabber to the graph
+                hr = m_FilterGraph.AddFilter( baseGrabFlt, "Ds.NET Grabber" );
+                DsError.ThrowExceptionForHR( hr );
+
+                SetConfigParms(capGraph, capFilter, media);
+
+                hr = capGraph.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, pAVIDecompressor, baseGrabFlt);
+                if (hr < 0)
+                {
+                    hr = capGraph.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, null, baseGrabFlt);
+                }
+
+                DsError.ThrowExceptionForHR( hr );
+
+                SaveSizeInfo(sampGrabber);
+            }
+            finally
+            {
+                if (capFilter != null)
+                {
+                    Marshal.ReleaseComObject(capFilter);
+                    capFilter = null;
+                }
+                if (sampGrabber != null)
+                {
+                    Marshal.ReleaseComObject(sampGrabber);
+                    sampGrabber = null;
+                }
+                if (capGraph != null)
+                {
+                    Marshal.ReleaseComObject(capGraph);
+                    capGraph = null;
+                }
+            }
+        }
+
+        private void SaveSizeInfo(ISampleGrabber sampGrabber)
+        {
+            int hr;
+
+            // Get the media type from the SampleGrabber
+            AMMediaType media = new AMMediaType();
+            hr = sampGrabber.GetConnectedMediaType( media );
+            DsError.ThrowExceptionForHR( hr );
+
+            if( (media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero) )
+            {
+                throw new NotSupportedException( "Unknown Grabber Media Format" );
+            }
+
+            // Grab the size info
+            VideoInfoHeader videoInfoHeader = (VideoInfoHeader) Marshal.PtrToStructure( media.formatPtr, typeof(VideoInfoHeader) );
+            m_videoWidth = videoInfoHeader.BmiHeader.Width;
+            m_videoHeight = videoInfoHeader.BmiHeader.Height;
+            m_stride = m_videoWidth * (videoInfoHeader.BmiHeader.BitCount / 8);
+
+            DsUtils.FreeAMMediaType(media);
+            media = null;
+        }
+        private void ConfigureSampleGrabber(ISampleGrabber sampGrabber)
+        {
+            AMMediaType media;
+            int hr;
+
+            // Set the media type to Video/RBG24
+            media = new AMMediaType();
+            media.majorType	= MediaType.Video;
+            media.subType	= MediaSubType.RGB24;
+            media.formatType = FormatType.VideoInfo;
+            hr = sampGrabber.SetMediaType( media );
+            DsError.ThrowExceptionForHR( hr );
+
+            DsUtils.FreeAMMediaType(media);
+            media = null;
+
+            // Configure the samplegrabber
+            hr = sampGrabber.SetCallback( this, 1 );
+            DsError.ThrowExceptionForHR( hr );
+        }
+
+        // Set the Framerate, and video size
+        private void SetConfigParms(ICaptureGraphBuilder2 capGraph, IBaseFilter capFilter, AMMediaType media)
+        {
+            int hr;
+            object o;
+
+            // Find the stream config interface
+            hr = capGraph.FindInterface(
+                PinCategory.Capture, MediaType.Video, capFilter, typeof(IAMStreamConfig).GUID, out o );
+
+            IAMStreamConfig videoStreamConfig = o as IAMStreamConfig;
+            if (videoStreamConfig == null)
+            {
+                throw new Exception("Failed to get IAMStreamConfig");
+            }           
+
+            // Set the new format
+            hr = videoStreamConfig.SetFormat( media );
+            DsError.ThrowExceptionForHR( hr );
+
+            DsUtils.FreeAMMediaType(media);
+            media = null;
+        }
+
+        /// <summary> Shut down capture </summary>
+        private void CloseInterfaces()
+        {
+            int hr;
+
+            try
+            {
+                if( m_mediaCtrl != null )
+                {
+                    // Stop the graph
+                    hr = m_mediaCtrl.Stop();
+                    m_bRunning = false;
+                }
+            }
+            catch (Exception ex)
+            {
+                Debug.WriteLine(ex);
+            }
+
+            if (m_FilterGraph != null)
+            {
+                Marshal.ReleaseComObject(m_FilterGraph);
+                m_FilterGraph = null;
+            }
+        }
+
+        /// <summary> sample callback, NOT USED. </summary>
+        int ISampleGrabberCB.SampleCB( double SampleTime, IMediaSample pSample )
+        {
+            if (!m_bGotOne)
+            {
+                // Set bGotOne to prevent further calls until we
+                // request a new bitmap.
+                m_bGotOne = true;
+                IntPtr pBuffer;
+
+                pSample.GetPointer(out pBuffer);
+                int iBufferLen = pSample.GetSize();
+
+                if (pSample.GetSize() > m_stride * m_videoHeight)
+                {
+                    throw new Exception("Buffer is wrong size");
+                }
+
+                CopyMemory(m_handle, pBuffer, m_stride * m_videoHeight);
+
+                // Picture is ready.
+                m_PictureReady.Set();
+            }
+
+            Marshal.ReleaseComObject(pSample);
+            return 0;
+        }
+
+        /// <summary> buffer callback, COULD BE FROM FOREIGN THREAD. </summary>
+        int ISampleGrabberCB.BufferCB( double SampleTime, IntPtr pBuffer, int BufferLen )
+        {
+            if (!m_bGotOne)
+            {
+                // The buffer should be long enought
+                if(BufferLen <= m_stride * m_videoHeight)
+                {
+                    // Copy the frame to the buffer
+                    CopyMemory(m_handle, pBuffer, m_stride * m_videoHeight);
+                }
+                else
+                {
+                    throw new Exception("Buffer is wrong size");
+                }
+
+                // Set bGotOne to prevent further calls until we
+                // request a new bitmap.
+                m_bGotOne = true;
+
+                // Picture is ready.
+                m_PictureReady.Set();
+            }
+            else
+            {
+                m_Dropped++;
+            }
+            return 0;
+        }
+    }
+}
diff --git a/Tools/ArdupilotMegaPlanner/Utilities/EnumTranslator.cs b/Tools/ArdupilotMegaPlanner/Utilities/EnumTranslator.cs
index e1901aadf1d9aebe243f00d662a7c3e0ab581aaf..3f4b4cb3ae7feecc99a5965d172f24b03965e3f5 100644
--- a/Tools/ArdupilotMegaPlanner/Utilities/EnumTranslator.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/EnumTranslator.cs
@@ -115,6 +115,19 @@ namespace ArdupilotMega.Utilities
          return displayText;
       }
 
+      public static int GetValue<T>(string item)
+      {
+          var list = Translate<T>();
+
+          foreach (var kvp in list)
+          {
+              if (kvp.Value == item)
+                  return kvp.Key;
+          }
+
+          return -1;
+      }
+
    }  
 
 }
diff --git a/Tools/ArdupilotMegaPlanner/LangUtility.cs b/Tools/ArdupilotMegaPlanner/Utilities/LangUtility.cs
similarity index 98%
rename from Tools/ArdupilotMegaPlanner/LangUtility.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/LangUtility.cs
index 9fa34a9f7fe3d046d705d545801f9fa2e4a50d04..aa0293cf3040af054da7b6d297eb0ee0a9ea1795 100644
--- a/Tools/ArdupilotMegaPlanner/LangUtility.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/LangUtility.cs
@@ -8,7 +8,7 @@ using System.Globalization;
 using System.ComponentModel;
 using System.Windows.Forms;
 
-namespace ArdupilotMega
+namespace ArdupilotMega.Utilities
 {
     static class CultureInfoEx
     {
diff --git a/Tools/ArdupilotMegaPlanner/Speech.cs b/Tools/ArdupilotMegaPlanner/Utilities/Speech.cs
similarity index 98%
rename from Tools/ArdupilotMegaPlanner/Speech.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/Speech.cs
index 0da3155caeb9226f6825a2b0958c36e5b8330179..cbe9de6515eec07c28787a771167830f022b7e20 100644
--- a/Tools/ArdupilotMegaPlanner/Speech.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/Speech.cs
@@ -5,7 +5,7 @@ using System.Text;
 using System.Speech.Synthesis;
 using log4net;
 
-namespace ArdupilotMega
+namespace ArdupilotMega.Utilities
 {
     public class Speech
     {
diff --git a/Tools/ArdupilotMegaPlanner/TCPConsole.cs b/Tools/ArdupilotMegaPlanner/Utilities/TCPConsole.cs
similarity index 98%
rename from Tools/ArdupilotMegaPlanner/TCPConsole.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/TCPConsole.cs
index 1a69413a405ff98979095575384c414d77e4b23b..20e9012a01ae0f0a2bc17a7a26d9398c9119ed0b 100644
--- a/Tools/ArdupilotMegaPlanner/TCPConsole.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/TCPConsole.cs
@@ -5,7 +5,7 @@ using System.Text;
 using System.Net;
 using System.Net.Sockets;
 
-namespace ArdupilotMega
+namespace ArdupilotMega.Utilities
 {
     static class TCPConsole
     {
diff --git a/Tools/ArdupilotMegaPlanner/ThemeManager.cs b/Tools/ArdupilotMegaPlanner/Utilities/ThemeManager.cs
similarity index 99%
rename from Tools/ArdupilotMegaPlanner/ThemeManager.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/ThemeManager.cs
index c15b74ec62bacae1065af70cd9f47fec6c0ef836..0d898577278069691411f59d2756d7b651a185c4 100644
--- a/Tools/ArdupilotMegaPlanner/ThemeManager.cs
+++ b/Tools/ArdupilotMegaPlanner/Utilities/ThemeManager.cs
@@ -5,7 +5,7 @@ using ArdupilotMega.Controls.BackstageView;
 using log4net;
 using ArdupilotMega.Controls;
 
-namespace ArdupilotMega
+namespace ArdupilotMega.Utilities
 {
     /// <summary>
     /// Helper class for the stylng 'theming' of forms and controls, and provides MessageBox
diff --git a/Tools/ArdupilotMegaPlanner/hires.cs b/Tools/ArdupilotMegaPlanner/Utilities/hires.cs
similarity index 100%
rename from Tools/ArdupilotMegaPlanner/hires.cs
rename to Tools/ArdupilotMegaPlanner/Utilities/hires.cs
diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/ArduCopterConfig.xml b/Tools/ArdupilotMegaPlanner/bin/Release/ArduCopterConfig.xml
index e90fae40cfe29cd13e042a768ec38068277fe659..2558e46e2c8022bcb52c9e741b1213e441e8bd02 100644
--- a/Tools/ArdupilotMegaPlanner/bin/Release/ArduCopterConfig.xml
+++ b/Tools/ArdupilotMegaPlanner/bin/Release/ArduCopterConfig.xml
@@ -56,14 +56,14 @@ When the sticks are fully deflected:
       <FIELD>
         <NAME>Dampen</NAME>
         <PARAMNAME>STAB_D</PARAMNAME>
-        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMIN>0</RANGEMIN>
         <RANGEMAX>5</RANGEMAX>
         <STEP>0.001</STEP>
       </FIELD>
       <FIELD>
         <NAME>Dynamic</NAME>
         <PARAMNAME>STAB_D_S</PARAMNAME>
-        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMIN>0</RANGEMIN>
         <RANGEMAX>1</RANGEMAX>
         <STEP>0.001</STEP>
       </FIELD>
@@ -201,5 +201,87 @@ A distance error of 100cm * P of .25 = 25 cm/s
         <STEP>0.1</STEP>
       </FIELD>
     </FIELDS>
+    <SUBHEAD>WP Speed:</SUBHEAD>
+    <DESC>
+      How fast the copter should move towards the target. A larger value means a faster return to center, but can cause the copter to oscillate around the target.
+
+      in m/s
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>Speed</NAME>
+        <PARAMNAME>WP_SPEED_MAX</PARAMNAME>
+        <RANGEMIN>1</RANGEMIN>
+        <RANGEMAX>30</RANGEMAX>
+        <STEP>1</STEP>
+      </FIELD>
+    </FIELDS>
+  </Item>
+  <!-- Alt Hold -->
+  <Item>
+    <HEAD>Altitude Hold:</HEAD>
+    <SUBHEAD>Altitude Error:</SUBHEAD>
+    <DESC>
+      How fast the copter should go to reach the correct altitude.
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>P</NAME>
+        <PARAMNAME>THR_ALT_P</PARAMNAME>
+        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>I</NAME>
+        <PARAMNAME>THR_ALT_I</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>IMAX</NAME>
+        <PARAMNAME>THR_ALT_IMAX</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>50</RANGEMAX>
+        <STEP>0.1</STEP>
+      </FIELD>
+    </FIELDS>
+    <SUBHEAD>Thrust Rate:</SUBHEAD>
+    <DESC>
+      How much thrust to give us the desired rate.
+      
+      This will change depending on the weight and thrust of your copter.
+    </DESC>
+    <FIELDS>
+      <FIELD>
+        <NAME>P</NAME>
+        <PARAMNAME>THR_RATE_P</PARAMNAME>
+        <RANGEMIN>0.001</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>I</NAME>
+        <PARAMNAME>THR_RATE_I</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>D</NAME>
+        <PARAMNAME>THR_RATE_D</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>5</RANGEMAX>
+        <STEP>0.001</STEP>
+      </FIELD>
+      <FIELD>
+        <NAME>IMAX</NAME>
+        <PARAMNAME>THR_RATE_IMAX</PARAMNAME>
+        <RANGEMIN>0</RANGEMIN>
+        <RANGEMAX>50</RANGEMAX>
+        <STEP>0.1</STEP>
+      </FIELD>
+    </FIELDS>
   </Item>
 </AC>
diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb b/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb
index b4768625fb68b6190a5e5250b74a477d28298884..e0a3a65d925c874f10b799ccc80ee16fd7db9ac0 100644
Binary files a/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb and b/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb differ
diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/version.txt b/Tools/ArdupilotMegaPlanner/bin/Release/version.txt
index 0b1ae78e9c1899a5f2a3c0a5001288850fca748c..cf279dbac70c778e06cd683e3db7c8535e628f1c 100644
--- a/Tools/ArdupilotMegaPlanner/bin/Release/version.txt
+++ b/Tools/ArdupilotMegaPlanner/bin/Release/version.txt
@@ -1 +1 @@
-1.1.4494.38818
\ No newline at end of file
+1.1.4498.32482
\ No newline at end of file
diff --git a/Tools/ArdupilotMegaPlanner/temp.cs b/Tools/ArdupilotMegaPlanner/temp.cs
index 28e7bb4dc27d36a4c4ab32c16bbfc5c9819a47f4..18c528c433ccc5062c7893ba4254b919e028bc00 100644
--- a/Tools/ArdupilotMegaPlanner/temp.cs
+++ b/Tools/ArdupilotMegaPlanner/temp.cs
@@ -17,6 +17,7 @@ using log4net;
 
 using System.Security.Permissions;
 using ArdupilotMega.Arduino;
+using ArdupilotMega.Utilities;
 
 namespace ArdupilotMega
 {