Added flight display and controller save/load functionality.
Added flight display and controller save/load functionality.

--- a/KerbalEngineer/BuildEngineer/BuildAdvanced.cs
+++ b/KerbalEngineer/BuildEngineer/BuildAdvanced.cs
@@ -412,7 +412,7 @@
         {
             try
             {
-                SettingsList list = new SettingsList();
+                SettingList list = new SettingList();
                 list.AddSetting("visible", _visible);
                 list.AddSetting("x", _windowPosition.x);
                 list.AddSetting("y", _windowPosition.y);
@@ -421,7 +421,7 @@
                 list.AddSetting("atmosphere", _useAtmosphericDetails);
                 list.AddSetting("bodies", _showReferenceBodies);
                 list.AddSetting("selected_body", CelestialBodies.Instance.SelectedBodyName);
-                SettingsList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/BuildAdvanced", list);
+                SettingList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/BuildAdvanced", list);
 
                 print("[KerbalEngineer/BuildAdvanced]: Successfully saved settings.");
             }
@@ -433,7 +433,7 @@
         {
             try
             {
-                SettingsList list = SettingsList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/BuildAdvanced");
+                SettingList list = SettingList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/BuildAdvanced");
                 _visible = (bool)list.GetSetting("visible", _visible);
                 _windowPosition.x = (float)list.GetSetting("x", _windowPosition.x);
                 _windowPosition.y = (float)list.GetSetting("y", _windowPosition.y);

--- a/KerbalEngineer/BuildEngineer/BuildOverlay.cs
+++ b/KerbalEngineer/BuildEngineer/BuildOverlay.cs
@@ -318,9 +318,9 @@
         {
             try
             {
-                SettingsList list = new SettingsList();
+                SettingList list = new SettingList();
                 list.AddSetting("visible", _visible);
-                SettingsList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/BuildOverlay", list);
+                SettingList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/BuildOverlay", list);
 
                 print("[KerbalEngineer/BuildOverlay]: Successfully saved settings.");
             }
@@ -332,7 +332,7 @@
         {
             try
             {
-                SettingsList list = SettingsList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/BuildOverlay");
+                SettingList list = SettingList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/BuildOverlay");
                 _visible = (bool)list.GetSetting("visible", _visible);
 
                 print("[KerbalEngineer/BuildOverlay]: Successfully loaded settings.");

--- a/KerbalEngineer/Extensions/DoubleExtensions.cs
+++ b/KerbalEngineer/Extensions/DoubleExtensions.cs
@@ -14,7 +14,7 @@
             value *= 1000;
 
             if (showNotation)
-                return value.ToString("#,0.") + " kg";
+                return value.ToString("#,0.") + "kg";
             else
                 return value.ToString("#,0.");
         }
@@ -25,7 +25,7 @@
         public static string ToForce(this double value, bool showNotation = true)
         {
             if (showNotation)
-                return value.ToString("#,0.#") + " kN";
+                return value.ToString("#,0.#") + "kN";
             else
                 return value.ToString("#,0.#");
         }
@@ -36,7 +36,7 @@
         public static string ToSpeed(this double value, bool showNotation = true)
         {
             if (showNotation)
-                return value.ToString("0") + " m/s";
+                return value.ToString("0") + "m/s";
             else
                 return value.ToString("0");
         }
@@ -46,16 +46,23 @@
         /// </summary>
         public static string ToDistance(this double value)
         {
+            bool negative = value < 0d;
+
+            if (negative) value = -value;
+
             if (value < 1000000d)
             {
                 if (value < 1d)
                 {
                     value *= 1000d;
-                    return value.ToString("#,0.") + " mm";
+
+                    if (negative) value = -value;
+                    return value.ToString("#,0.") + "mm";
                 }
                 else
                 {
-                    return value.ToString("#,0.") + " m";
+                    if (negative) value = -value;
+                    return value.ToString("#,0.") + "m";
                 }
             }
             else
@@ -64,11 +71,13 @@
                 if (value >= 1000000d)
                 {
                     value /= 1000d;
-                    return value.ToString("#,0." + " Mm");
+                    if (negative) value = -value;
+                    return value.ToString("#,0." + "Mm");
                 }
                 else
                 {
-                    return value.ToString("#,0." + " km");
+                    if (negative) value = -value;
+                    return value.ToString("#,0." + "km");
                 }
             }
         }

--- a/KerbalEngineer/FlightEngineer/FlightController.cs
+++ b/KerbalEngineer/FlightEngineer/FlightController.cs
@@ -3,6 +3,7 @@
 // License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
 using System.IO;
+using KerbalEngineer.Settings;
 using UnityEngine;
 
 namespace KerbalEngineer.FlightEngineer
@@ -118,18 +119,16 @@
         {
             GUILayout.BeginHorizontal();
 
+            // Draw fixed section display toggles.
             GUILayout.BeginVertical();
-            GUILayout.Toggle(false, "ORBITAL", _buttonStyle);
-            GUILayout.Toggle(false, "SURFACE", _buttonStyle);
-            GUILayout.Toggle(false, "VESSEL", _buttonStyle);
-            GUILayout.Toggle(false, "RENDEZVOUS", _buttonStyle);
+            foreach (Section section in SectionList.Instance.FixedSections)
+                section.Visible = GUILayout.Toggle(section.Visible, section.Title.ToUpper(), _buttonStyle);
             GUILayout.EndVertical();
 
+            // Draw fixed section edit toggles.
             GUILayout.BeginVertical(GUILayout.Width(50f));
-            GUILayout.Toggle(false, "EDIT", _buttonStyle);
-            GUILayout.Toggle(false, "EDIT", _buttonStyle);
-            GUILayout.Toggle(false, "EDIT", _buttonStyle);
-            GUILayout.Toggle(false, "EDIT", _buttonStyle);
+            foreach (Section section in SectionList.Instance.FixedSections)
+                GUILayout.Toggle(false, "EDIT", _buttonStyle);
             GUILayout.EndVertical();
 
             GUILayout.EndHorizontal();
@@ -196,6 +195,37 @@
         }
 
         #endregion
+
+        #region Save and Load
+
+        // Saves the settings associated with the flight controller.
+        public void Save()
+        {
+            try
+            {
+                SettingList list = new SettingList();
+                list.AddSetting("open", _open);
+                SettingList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/FlightController", list);
+
+                MonoBehaviour.print("[KerbalEngineer/FlightController]: Successfully saved settings.");
+            }
+            catch { MonoBehaviour.print("[KerbalEngineer/FlightController]: Failed to save settings."); }
+        }
+
+        // Loads the settings associated with the flight controller.
+        public void Load()
+        {
+            try
+            {
+                SettingList list = SettingList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/FlightController");
+                _open = (bool)list.GetSetting("open", _open);
+
+                MonoBehaviour.print("[KerbalEngineer/FlightController]: Successfully loaded settings.");
+            }
+            catch { MonoBehaviour.print("[KerbalEngineer/FlightController]: Failed to load settings."); }
+        }
+
+        #endregion
     }
 }
 

--- a/KerbalEngineer/FlightEngineer/FlightDisplay.cs
+++ b/KerbalEngineer/FlightEngineer/FlightDisplay.cs
@@ -2,6 +2,8 @@
 // Author:  CYBUTEK
 // License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
+using KerbalEngineer.Extensions;
+using KerbalEngineer.Settings;
 using UnityEngine;
 
 namespace KerbalEngineer.FlightEngineer
@@ -29,7 +31,6 @@
 
         #region Fields
 
-        private Rect _windowPosition = new Rect(Screen.width / 2f - 125f, 100f, 250f, 0f);
         private GUIStyle _windowStyle;
         private int _windowID = EngineerGlobals.GetNextWindowID();
 
@@ -37,12 +38,31 @@
 
         #endregion
 
+        #region Properties
+
+        private Rect _windowPosition = new Rect(Screen.width / 2f - 125f, 100f, 250f, 0f);
+        /// <summary>
+        /// Gets and sets the window position.
+        /// </summary>
+        public Rect WindowPosition
+        {
+            get { return _windowPosition; }
+            set { _windowPosition = value; }
+        }
+
+        private bool _requireResize = false;
+        /// <summary>
+        /// Gets and sets whether the display requires a resize.
+        /// </summary>
+        public bool RequireResize
+        {
+            get { return _requireResize; }
+            set { _requireResize = value; }
+        }
+
+        #endregion
+
         #region Initialisation
-
-        private FlightDisplay()
-        {
-
-        }
 
         private void InitialiseStyles()
         {
@@ -59,20 +79,79 @@
 
         public void Update()
         {
+            // Update all visible fixed sections.
+            foreach (Section section in SectionList.Instance.FixedSections)
+                if (section.Visible)
+                    section.Update();
+
+            // Update all visible user sections.
+            foreach (Section section in SectionList.Instance.UserSections)
+                if (section.Visible)
+                    section.Update();
         }
 
         public void Draw()
         {
             if (!_hasInitStyles) InitialiseStyles();
 
-            _windowPosition = GUILayout.Window(_windowID, _windowPosition, Window, string.Empty, _windowStyle);
+            // Handle window resizing if something has changed within the GUI.
+            if (_requireResize)
+            {
+                _requireResize = false;
+                _windowPosition.width = 0f;
+                _windowPosition.height = 0f;
+            }
+
+            if (SectionList.Instance.HasVisibleSections())
+                _windowPosition = GUILayout.Window(_windowID, _windowPosition, Window, string.Empty, _windowStyle).ClampToScreen();
         }
 
         private void Window(int windowID)
         {
-            SectionOrbital.Instance.Draw();
+            // Draw all visible fixed sections.
+            foreach (Section section in SectionList.Instance.FixedSections)
+                if (section.Visible)
+                    section.Draw();
+
+            // Draw all visible user sections.
+            foreach (Section section in SectionList.Instance.UserSections)
+                if (section.Visible)
+                    section.Draw();
 
             GUI.DragWindow();
+        }
+
+        #endregion
+
+        #region Save and Load
+
+        // Saves the settings associated with the flight display.
+        public void Save()
+        {
+            try
+            {
+                SettingList list = new SettingList();
+                list.AddSetting("x", _windowPosition.x);
+                list.AddSetting("y", _windowPosition.y);
+                SettingList.SaveToFile(EngineerGlobals.AssemblyPath + "Settings/FlightDisplay", list);
+                
+                MonoBehaviour.print("[KerbalEngineer/FlightDisplay]: Successfully saved settings.");
+            }
+            catch { MonoBehaviour.print("[KerbalEngineer/FlightDisplay]: Failed to save settings."); }
+        }
+
+        // Loads the settings associated with the flight display.
+        public void Load()
+        {
+            try
+            {
+                SettingList list = SettingList.CreateFromFile(EngineerGlobals.AssemblyPath + "Settings/FlightDisplay");
+                _windowPosition.x = (float)list.GetSetting("x", _windowPosition.x);
+                _windowPosition.y = (float)list.GetSetting("y", _windowPosition.y);
+
+                MonoBehaviour.print("[KerbalEngineer/FlightDisplay]: Successfully loaded settings.");
+            }
+            catch { MonoBehaviour.print("[KerbalEngineer/FlightDisplay]: Failed to load settings."); }
         }
 
         #endregion

--- a/KerbalEngineer/FlightEngineer/FlightEngineer.cs
+++ b/KerbalEngineer/FlightEngineer/FlightEngineer.cs
@@ -3,6 +3,7 @@
 // License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
 using KerbalEngineer.Extensions;
+using KerbalEngineer.Settings;
 using UnityEngine;
 
 namespace KerbalEngineer.FlightEngineer
@@ -23,7 +24,7 @@
 
         public void Update()
         {
-            if (FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
+            if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
             {
                 FlightController.Instance.Update();
                 FlightDisplay.Instance.Update();
@@ -32,7 +33,7 @@
 
         public void OnDraw()
         {
-            if (FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
+            if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
             {
                 FlightController.Instance.Draw();
                 FlightDisplay.Instance.Draw();
@@ -40,6 +41,30 @@
         }
 
         #endregion
+
+        #region Save and Load
+
+        // Runs when the part module is asked to save.
+        public override void OnSave(ConfigNode node)
+        {
+            if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
+            {
+                FlightController.Instance.Save();
+                FlightDisplay.Instance.Save();
+            }
+        }
+
+        // Runs when the part module is asked to load.
+        public override void OnLoad(ConfigNode node)
+        {
+            if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ActiveVessel == this.vessel && this.part.IsPrimary(this.vessel.parts, this))
+            {
+                FlightController.Instance.Load();
+                FlightDisplay.Instance.Load();
+            }
+        }
+
+        #endregion
     }
 }
 

--- /dev/null
+++ b/KerbalEngineer/FlightEngineer/Orbital/PeriapsisHeight.cs
@@ -1,1 +1,25 @@
+// Name:    Kerbal Engineer Redux
+// Author:  CYBUTEK
+// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
+using KerbalEngineer.Extensions;
+using UnityEngine;
+
+namespace KerbalEngineer.FlightEngineer.Orbital
+{
+    public class PeriapsisHeight : Readout
+    {
+        protected override void Initialise()
+        {
+            Name = "Periapsis Height";
+            Description = "Shows the periapsis height from sea level.";
+            Category = ReadoutCategory.Orbital;
+        }
+
+        public override void Draw()
+        {
+            DrawLine(FlightGlobals.ActiveVessel.orbit.PeA.ToDistance());
+        }
+    }
+}
+

--- /dev/null
+++ b/KerbalEngineer/FlightEngineer/Orbital/TimeToPeriapsis.cs
@@ -1,1 +1,25 @@
+// Name:    Kerbal Engineer Redux
+// Author:  CYBUTEK
+// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
+using KerbalEngineer.Extensions;
+using UnityEngine;
+
+namespace KerbalEngineer.FlightEngineer.Orbital
+{
+    public class TimeToPeriapsis : Readout
+    {
+        protected override void Initialise()
+        {
+            Name = "Time to Periapsis";
+            Description = "Shows the time to periapsis.";
+            Category = ReadoutCategory.Orbital;
+        }
+
+        public override void Draw()
+        {
+            DrawLine(FlightGlobals.ActiveVessel.orbit.timeToPe.ToTime());
+        }
+    }
+}
+

--- a/KerbalEngineer/FlightEngineer/Readout.cs
+++ b/KerbalEngineer/FlightEngineer/Readout.cs
@@ -81,7 +81,7 @@
             NameStyle = new GUIStyle(HighLogic.Skin.label);
             NameStyle.normal.textColor = Color.white;
             NameStyle.margin = new RectOffset();
-            NameStyle.padding = new RectOffset();
+            NameStyle.padding = new RectOffset(3, 3, 3, 3);
             NameStyle.fontSize = 11;
             NameStyle.fontStyle = FontStyle.Bold;
             NameStyle.alignment = TextAnchor.MiddleLeft;
@@ -89,7 +89,7 @@
 
             DataStyle = new GUIStyle(HighLogic.Skin.label);
             DataStyle.margin = new RectOffset();
-            DataStyle.padding = new RectOffset();
+            DataStyle.padding = new RectOffset(3, 3, 3, 3);
             DataStyle.fontSize = 11;
             DataStyle.fontStyle = FontStyle.Normal;
             DataStyle.alignment = TextAnchor.MiddleRight;

--- a/KerbalEngineer/FlightEngineer/ReadoutList.cs
+++ b/KerbalEngineer/FlightEngineer/ReadoutList.cs
@@ -46,7 +46,9 @@
         private ReadoutList()
         {
             _readouts.Add(new Orbital.ApoapsisHeight());
+            _readouts.Add(new Orbital.PeriapsisHeight());
             _readouts.Add(new Orbital.TimeToApoapsis());
+            _readouts.Add(new Orbital.TimeToPeriapsis());
         }
 
         #endregion

--- a/KerbalEngineer/FlightEngineer/Section.cs
+++ b/KerbalEngineer/FlightEngineer/Section.cs
@@ -24,6 +24,22 @@
             set { _readouts = value; }
         }
 
+        private bool _visible = false;
+        /// <summary>
+        /// Gets and sets whether the section is visible.
+        /// </summary>
+        public bool Visible
+        {
+            get { return _visible; }
+            set
+            {
+                if (_visible != value)
+                    FlightDisplay.Instance.RequireResize = true;
+
+                _visible = value;
+            }
+        }
+
         private string _title = string.Empty;
         /// <summary>
         /// Gets and sets the section title.
@@ -47,7 +63,7 @@
         {
             TitleStyle = new GUIStyle(HighLogic.Skin.label);
             TitleStyle.margin = new RectOffset();
-            TitleStyle.padding = new RectOffset();
+            TitleStyle.padding = new RectOffset(3, 3, 3, 3);
             TitleStyle.normal.textColor = Color.white;
             TitleStyle.fontSize = 13;
             TitleStyle.fontStyle = FontStyle.Bold;
@@ -70,7 +86,7 @@
 
         public void Draw()
         {
-            GUILayout.Label(_title, TitleStyle);
+            GUILayout.Label(_title.ToUpper(), TitleStyle);
             GUILayout.BeginVertical(AreaStyle);
             foreach (Readout readout in _readouts)
                 readout.Draw();

--- /dev/null
+++ b/KerbalEngineer/FlightEngineer/SectionList.cs
@@ -1,1 +1,85 @@
+// Name:    Kerbal Engineer Redux
+// Author:  CYBUTEK
+// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
+using System.Collections.Generic;
+
+namespace KerbalEngineer.FlightEngineer
+{
+    public class SectionList
+    {
+        #region Instance
+
+        private static SectionList _instance;
+        /// <summary>
+        /// Gets the current instance of the section list.
+        /// </summary>
+        public static SectionList Instance
+        {
+            get
+            {
+                if (_instance == null)
+                    _instance = new SectionList();
+
+                return _instance;
+            }
+        }
+
+        #endregion
+
+        #region Properties
+
+        private List<Section> _fixedSections = new List<Section>();
+        /// <summary>
+        /// Gets and sets the available fixed sections.
+        /// </summary>
+        public List<Section> FixedSections
+        {
+            get { return _fixedSections; }
+            set { _fixedSections = value; }
+        }
+
+        private List<Section> _userSections = new List<Section>();
+        /// <summary>
+        /// Gets and sets the available user sections.
+        /// </summary>
+        public List<Section> UserSections
+        {
+            get { return _userSections; }
+            set { _userSections = value; }
+        }
+
+        #endregion
+
+        #region Initialisation
+
+        private SectionList()
+        {
+            _fixedSections.Add(new SectionOrbital());
+            _fixedSections.Add(new SectionOrbital());
+        }
+
+        #endregion
+
+        #region Public Methods
+
+        /// <summary>
+        /// Gets whether there are sections that are set to be visible.
+        /// </summary>
+        public bool HasVisibleSections()
+        {
+            foreach (Section section in _fixedSections)
+                if (section.Visible)
+                    return true;
+
+            foreach (Section section in _userSections)
+                if (section.Visible)
+                    return true;
+
+            return false;
+        }
+
+        #endregion
+    }
+}
+

--- a/KerbalEngineer/FlightEngineer/SectionOrbital.cs
+++ b/KerbalEngineer/FlightEngineer/SectionOrbital.cs
@@ -6,28 +6,9 @@
 {
     public class SectionOrbital : Section
     {
-        #region Instance
-
-        private static SectionOrbital _instance;
-        /// <summary>
-        /// Gets the current instance of the orbital section.
-        /// </summary>
-        public static SectionOrbital Instance
-        {
-            get
-            {
-                if (_instance == null)
-                    _instance = new SectionOrbital();
-
-                return _instance;
-            }
-        }
-
-        #endregion
-
         #region Initialisation
 
-        private SectionOrbital()
+        public SectionOrbital()
         {
             Title = "Orbital";
             Readouts.AddRange(ReadoutList.Instance.GetCategory(ReadoutCategory.Orbital));

--- a/KerbalEngineer/KerbalEngineer.csproj
+++ b/KerbalEngineer/KerbalEngineer.csproj
@@ -60,15 +60,18 @@
     <Compile Include="FlightEngineer\FlightController.cs" />
     <Compile Include="FlightEngineer\FlightDisplay.cs" />
     <Compile Include="FlightEngineer\FlightEngineer.cs" />
+    <Compile Include="FlightEngineer\Orbital\TimeToPeriapsis.cs" />
+    <Compile Include="FlightEngineer\Orbital\PeriapsisHeight.cs" />
     <Compile Include="FlightEngineer\Orbital\TimeToApoapsis.cs" />
     <Compile Include="FlightEngineer\ReadoutList.cs" />
+    <Compile Include="FlightEngineer\SectionList.cs" />
     <Compile Include="FlightEngineer\SectionOrbital.cs" />
     <Compile Include="FlightEngineer\Orbital\ApoapsisHeight.cs" />
     <Compile Include="FlightEngineer\Readout.cs" />
     <Compile Include="FlightEngineer\Section.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Settings\Setting.cs" />
-    <Compile Include="Settings\SettingsList.cs" />
+    <Compile Include="Settings\SettingList.cs" />
     <Compile Include="Simulation\PartSim.cs" />
     <Compile Include="Simulation\ResourceContainer.cs" />
     <Compile Include="Simulation\SimulationManager.cs" />

--- /dev/null
+++ b/KerbalEngineer/Settings/SettingList.cs
@@ -1,1 +1,94 @@
+// Name:    Kerbal Engineer Redux
+// Author:  CYBUTEK
+// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace KerbalEngineer.Settings
+{
+    [Serializable]
+    public class SettingList
+    {
+        #region Fields
+
+        private List<Setting> _settings = new List<Setting>();
+
+        #endregion
+
+        #region Public Methods
+
+        /// <summary>
+        /// Add a setting into this settings list.
+        /// </summary>
+        public void AddSetting(string name, object value)
+        {
+            foreach (Setting setting in _settings)
+            {
+                if (setting.Name == name)
+                {
+                    setting.Value = value;
+                    return;
+                }
+            }
+
+            _settings.Add(new Setting(name, value));
+        }
+
+        /// <summary>
+        /// Gets a setting value from this settings list, or returns the default value.
+        /// </summary>
+        public object GetSetting(string name, object defaultValue)
+        {
+            foreach (Setting setting in _settings)
+            {
+                if (setting.Name == name)
+                    return setting.Value;
+            }
+
+            AddSetting(name, defaultValue);
+            return defaultValue;
+        }
+
+        #endregion
+
+        #region Static Methods
+
+        /// <summary>
+        /// Creates a settings list from an existing file, or returns a blank settings list object.
+        /// </summary>
+        public static SettingList CreateFromFile(string filename)
+        {
+            if (File.Exists(filename))
+            {
+                try
+                {
+                    return new BinaryFormatter().Deserialize(File.OpenRead(filename)) as SettingList;
+                }
+                catch { throw new Exception("Could not load settings from file."); }
+            }
+
+            return new SettingList();
+        }
+
+        /// <summary>
+        /// Saves a settings list to a file.
+        /// </summary>
+        public static void SaveToFile(string filename, SettingList settingList)
+        {
+            if (!Directory.Exists(new FileInfo(filename).DirectoryName))
+                Directory.CreateDirectory(new FileInfo(filename).DirectoryName);
+
+            try
+            {
+                new BinaryFormatter().Serialize(File.OpenWrite(filename), settingList);
+            }
+            catch { throw new Exception("Could not save settings to file."); }
+        }
+
+        #endregion
+    }
+}
+

--- a/KerbalEngineer/Settings/SettingsList.cs
+++ /dev/null
@@ -1,94 +1,1 @@
-// Name:    Kerbal Engineer Redux
-// Author:  CYBUTEK
-// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Runtime.Serialization.Formatters.Binary;
-
-namespace KerbalEngineer.Settings
-{
-    [Serializable]
-    public class SettingsList
-    {
-        #region Fields
-
-        private List<Setting> _settings = new List<Setting>();
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Add a setting into this settings list.
-        /// </summary>
-        public void AddSetting(string name, object value)
-        {
-            foreach (Setting setting in _settings)
-            {
-                if (setting.Name == name)
-                {
-                    setting.Value = value;
-                    return;
-                }
-            }
-
-            _settings.Add(new Setting(name, value));
-        }
-
-        /// <summary>
-        /// Gets a setting value from this settings list, or returns the default value.
-        /// </summary>
-        public object GetSetting(string name, object defaultValue)
-        {
-            foreach (Setting setting in _settings)
-            {
-                if (setting.Name == name)
-                    return setting.Value;
-            }
-
-            AddSetting(name, defaultValue);
-            return defaultValue;
-        }
-
-        #endregion
-
-        #region Static Methods
-
-        /// <summary>
-        /// Creates a settings list from an existing file, or returns a blank settings list object.
-        /// </summary>
-        public static SettingsList CreateFromFile(string filename)
-        {
-            if (File.Exists(filename))
-            {
-                try
-                {
-                    return new BinaryFormatter().Deserialize(File.OpenRead(filename)) as SettingsList;
-                }
-                catch { throw new Exception("Could not load settings from file."); }
-            }
-
-            return new SettingsList();
-        }
-
-        /// <summary>
-        /// Saves a settings list to a file.
-        /// </summary>
-        public static void SaveToFile(string filename, SettingsList settingList)
-        {
-            if (!Directory.Exists(new FileInfo(filename).DirectoryName))
-                Directory.CreateDirectory(new FileInfo(filename).DirectoryName);
-
-            try
-            {
-                new BinaryFormatter().Serialize(File.OpenWrite(filename), settingList);
-            }
-            catch { throw new Exception("Could not save settings to file."); }
-        }
-
-        #endregion
-    }
-}
-

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