GetStockSections has been made interface only, like the GetCustomSections function that returns a list of ISectionModule. Also added missing null check (should never be encountered but no harm in having robust code).
GetStockSections has been made interface only, like the GetCustomSections function that returns a list of ISectionModule. Also added missing null check (should never be encountered but no harm in having robust code).

 Binary files a/Assets/Plugins/KerbalEngineer.Unity.dll and b/Assets/Plugins/KerbalEngineer.Unity.dll differ
--- a/KerbalEngineer/Flight/FlightAppLauncher.cs
+++ b/KerbalEngineer/Flight/FlightAppLauncher.cs
@@ -62,7 +62,7 @@
         /// <summary>
         ///     Gets a list of stock sections.
         /// </summary>
-        public IList<ISectionModule> GetStockSections()
+        IList<ISectionModule> IFlightAppLauncher.GetStockSections()
         {
             return new List<ISectionModule>(SectionLibrary.StockSections.ToArray());
         }
@@ -178,7 +178,7 @@
             {
                 m_FlightMenu.Close();
             }
-            else
+            else if (m_MenuObject != null)
             {
                 Destroy(m_MenuObject);
             }

--- a/KerbalEngineer/Flight/Readouts/Miscellaneous/LogSimToggle.cs
+++ /dev/null
@@ -1,56 +1,1 @@
-// 
-//     Kerbal Engineer Redux
-// 
-//     Copyright (C) 2014 CYBUTEK
-// 
-//     This program is free software: you can redistribute it and/or modify
-//     it under the terms of the GNU General Public License as published by
-//     the Free Software Foundation, either version 3 of the License, or
-//     (at your option) any later version.
-// 
-//     This program 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.  See the
-//     GNU General Public License for more details.
-// 
-//     You should have received a copy of the GNU General Public License
-//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-// 
 
-namespace KerbalEngineer.Flight.Readouts.Miscellaneous
-{
-    #region Using Directives
-
-    using Sections;
-    using UnityEngine;
-    using VesselSimulator;
-
-    #endregion
-
-    public class LogSimToggle : ReadoutModule
-    {
-        #region Constructors
-
-        public LogSimToggle()
-        {
-            this.Name = "Log Simulation";
-            this.Category = ReadoutCategory.GetCategory("Miscellaneous");
-            this.HelpString = "Shows a button that allows you to make the next run of the simulation code dump extra debugging output.";
-            this.IsDefault = false;
-        }
-
-        #endregion
-
-        #region Methods
-
-        public override void Draw(SectionModule section)
-        {
-            GUILayout.BeginHorizontal();
-            GUILayout.Label("Log Simulation: ", this.NameStyle);
-            SimManager.logOutput = GUILayout.Toggle(SimManager.logOutput, "ENABLED", this.ButtonStyle);
-            GUILayout.EndHorizontal();
-        }
-
-        #endregion
-    }
-}

--- a/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
+++ b/KerbalEngineer/Flight/Readouts/ReadoutLibrary.cs
@@ -192,7 +192,6 @@
                 readouts.Add(new SimulationDelay());
                 readouts.Add(new VectoredThrustToggle());
                 readouts.Add(new SystemTime());
-                readouts.Add(new LogSimToggle());
 
                 LoadHelpStrings();
             }

--- a/KerbalEngineer/Flight/Readouts/Surface/HorizontalSpeed.cs
+++ b/KerbalEngineer/Flight/Readouts/Surface/HorizontalSpeed.cs
@@ -45,12 +45,11 @@
 
         public override void Draw(SectionModule section)
         {
-            this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud);
-
-            // This workaround was used for KSP 1.0.3 and 1.0.4 where horizontalSrfSpeed was really badly broken
-            //var ves = FlightGlobals.ActiveVessel;
-            //double horizSpeed = Math.Sqrt(ves.srfSpeed * ves.srfSpeed - ves.verticalSpeed * ves.verticalSpeed);
-            //this.DrawLine(horizSpeed.ToSpeed(), section.IsHud);
+            // Used to do this but the bug-fix to horizontalSrfSpeed in KSP 1.0.3 actually made it worse so workaround
+            //this.DrawLine(FlightGlobals.ActiveVessel.horizontalSrfSpeed.ToSpeed(), section.IsHud);
+            var ves = FlightGlobals.ActiveVessel;
+            double horizSpeed = Math.Sqrt(ves.srfSpeed * ves.srfSpeed - ves.verticalSpeed * ves.verticalSpeed);
+            this.DrawLine(horizSpeed.ToSpeed(), section.IsHud);
         }
 
         #endregion

--- a/KerbalEngineer/KerbalEngineer.csproj
+++ b/KerbalEngineer/KerbalEngineer.csproj
@@ -54,7 +54,6 @@
     <Compile Include="Flight\ActionMenuGui.cs" />
     <Compile Include="Flight\FlightAppLauncher.cs" />
     <Compile Include="Flight\Presets\Preset.cs" />
-    <Compile Include="Flight\Readouts\Miscellaneous\LogSimToggle.cs" />
     <Compile Include="Flight\Readouts\Miscellaneous\SystemTime.cs" />
     <Compile Include="Flight\Readouts\Miscellaneous\VectoredThrustToggle.cs" />
     <Compile Include="Flight\Readouts\Miscellaneous\Separator.cs" />

--- a/KerbalEngineer/VesselSimulator/EngineSim.cs
+++ b/KerbalEngineer/VesselSimulator/EngineSim.cs
@@ -72,30 +72,26 @@
         }
 
         public static EngineSim New(PartSim theEngine,
-									ModuleEngines engineMod,
-									double atmosphere,
-									float machNumber,
-									bool vectoredThrust,
-									bool fullThrust,
-									LogMsg log)
-        {
-            float maxFuelFlow = engineMod.maxFuelFlow;
-            float minFuelFlow = engineMod.minFuelFlow;
-            float thrustPercentage = engineMod.thrustPercentage;
-            Vector3 vecThrust = CalculateThrustVector(vectoredThrust ? engineMod.thrustTransforms : null, log);
-            FloatCurve atmosphereCurve = engineMod.atmosphereCurve;
-            bool atmChangeFlow = engineMod.atmChangeFlow;
-            FloatCurve atmCurve = engineMod.useAtmCurve ? engineMod.atmCurve : null;
-            FloatCurve velCurve = engineMod.useVelCurve ? engineMod.velCurve : null;
-            float currentThrottle = engineMod.currentThrottle;
-            float IspG = engineMod.g;
-            bool throttleLocked = engineMod.throttleLocked || fullThrust;
-            List<Propellant> propellants = engineMod.propellants;
-            bool active = engineMod.isOperational;
-            float resultingThrust = engineMod.resultingThrust;
-            List<Transform> thrustTransforms = engineMod.thrustTransforms;
-			
-			EngineSim engineSim = pool.Borrow();
+                         double atmosphere,
+                         float machNumber,
+                         float maxFuelFlow,
+                         float minFuelFlow,
+                         float thrustPercentage,
+                         Vector3 vecThrust,
+                         FloatCurve atmosphereCurve,
+                         bool atmChangeFlow,
+                         FloatCurve atmCurve,
+                         FloatCurve velCurve,
+                         float currentThrottle,
+                         float IspG,
+                         bool throttleLocked,
+                         List<Propellant> propellants,
+                         bool active,
+                         float resultingThrust,
+                         List<Transform> thrustTransforms,
+                        LogMsg log)
+        {
+            EngineSim engineSim = pool.Borrow();
 
             engineSim.isp = 0.0;
             engineSim.maxMach = 0.0f;
@@ -124,7 +120,7 @@
                     log.buf.AppendFormat("actual  = {0:g6}\n", engineSim.actualThrust);
                 }
 
-				if (throttleLocked)
+                if (throttleLocked)
                 {
                     if (log != null) log.buf.AppendLine("throttleLocked is true, using thrust for flowRate");
                     flowRate = GetFlowRate(engineSim.thrust, engineSim.isp);
@@ -133,8 +129,7 @@
                 {
                     if (currentThrottle > 0.0f && engineSim.partSim.isLanded == false)
                     {
-						// TODO: This bit doesn't work for RF engines
-						if (log != null) log.buf.AppendLine("throttled up and not landed, using actualThrust for flowRate");
+                        if (log != null) log.buf.AppendLine("throttled up and not landed, using actualThrust for flowRate");
                         flowRate = GetFlowRate(engineSim.actualThrust, engineSim.isp);
                     }
                     else
@@ -208,32 +203,6 @@
 
             return engineSim;
         }
-
-		private static Vector3 CalculateThrustVector(List<Transform> thrustTransforms, LogMsg log)
-		{
-			if (thrustTransforms == null)
-			{
-				return Vector3.forward;
-			}
-
-			Vector3 thrustvec = Vector3.zero;
-			for (int i = 0; i < thrustTransforms.Count; ++i)
-			{
-				Transform trans = thrustTransforms[i];
-
-				if (log != null) log.buf.AppendFormat("Transform = ({0:g6}, {1:g6}, {2:g6})   length = {3:g6}\n", trans.forward.x, trans.forward.y, trans.forward.z, trans.forward.magnitude);
-
-				thrustvec -= trans.forward;
-			}
-
-			if (log != null) log.buf.AppendFormat("ThrustVec  = ({0:g6}, {1:g6}, {2:g6})   length = {3:g6}\n", thrustvec.x, thrustvec.y, thrustvec.z, thrustvec.magnitude);
-
-			thrustvec.Normalize();
-
-			if (log != null) log.buf.AppendFormat("ThrustVecN = ({0:g6}, {1:g6}, {2:g6})   length = {3:g6}\n", thrustvec.x, thrustvec.y, thrustvec.z, thrustvec.magnitude);
-
-			return thrustvec;
-		}
 
         public ResourceContainer ResourceConsumptions
         {

--- a/KerbalEngineer/VesselSimulator/PartSim.cs
+++ b/KerbalEngineer/VesselSimulator/PartSim.cs
@@ -234,13 +234,27 @@
                     {
                         if (log != null) log.buf.AppendLine("Module: " + engine.moduleName);
 
+                        Vector3 thrustvec = this.CalculateThrustVector(vectoredThrust ? engine.thrustTransforms : null, log);
+
                         EngineSim engineSim = EngineSim.New(
                             this,
-							engine,
-							atmosphere,
+                            atmosphere,
                             (float)mach,
-							vectoredThrust,
-							fullThrust,
+                            engine.maxFuelFlow,
+                            engine.minFuelFlow,
+                            engine.thrustPercentage,
+                            thrustvec,
+                            engine.atmosphereCurve,
+                            engine.atmChangeFlow,
+                            engine.useAtmCurve ? engine.atmCurve : null,
+                            engine.useVelCurve ? engine.velCurve : null,
+                            engine.currentThrottle,
+                            engine.g,
+                            engine.throttleLocked || fullThrust,
+                            engine.propellants,
+                            engine.isOperational,
+                            engine.resultingThrust,
+                            engine.thrustTransforms,
                             log);
                         allEngines.Add(engineSim);
                     }
@@ -254,14 +268,28 @@
                     ModuleEngines engine = engines[i];
                     if (log != null) log.buf.AppendLine("Module: " + engine.moduleName);
 
+                    Vector3 thrustvec = this.CalculateThrustVector(vectoredThrust ? engine.thrustTransforms : null, log);
+
                     EngineSim engineSim = EngineSim.New(
                         this,
-						engine,
                         atmosphere,
                         (float)mach,
-						vectoredThrust,
-						fullThrust,
-						log);
+                        engine.maxFuelFlow,
+                        engine.minFuelFlow,
+                        engine.thrustPercentage,
+                        thrustvec,
+                        engine.atmosphereCurve,
+                        engine.atmChangeFlow,
+                        engine.useAtmCurve ? engine.atmCurve : null,
+                        engine.useVelCurve ? engine.velCurve : null,
+                        engine.currentThrottle,
+                        engine.g,
+                        engine.throttleLocked || fullThrust,
+                        engine.propellants,
+                        engine.isOperational,
+                        engine.resultingThrust,
+                        engine.thrustTransforms,
+                        log);
                     allEngines.Add(engineSim);
                 }
             }

 Binary files a/Output/KerbalEngineer/KerbalEngineer.Unity.dll and b/Output/KerbalEngineer/KerbalEngineer.Unity.dll differ
 Binary files a/Output/KerbalEngineer/KerbalEngineer.dll and b/Output/KerbalEngineer/KerbalEngineer.dll differ