VOIDCore_Generic: Basic cleanup removing underscores, fixing some naming conventions, etc.
VOIDCore_Generic: Basic cleanup removing underscores, fixing some naming conventions, etc.

--- a/API/IVOID_Module.cs
+++ b/API/IVOID_Module.cs
@@ -46,7 +46,7 @@
 
 		void LoadConfig();
 
-		void _SaveToConfig(KSP.IO.PluginConfiguration config);
+		void Save(KSP.IO.PluginConfiguration config);
 	}
 
 	public interface IVOID_BehaviorModule : IVOID_Module

--- a/API/VOIDCore.cs
+++ b/API/VOIDCore.cs
@@ -35,35 +35,32 @@
 
 namespace VOID
 {
-	public abstract class VOIDCore : VOID_Module, IVOID_Module
+	public abstract class VOIDCore : VOID_WindowModule, IVOID_Module
 	{
 		public const double Constant_G = 6.674e-11;
 		public const int CONFIG_VERSION = 2;
 
-		public static bool useToolbarManager;
-
-		public abstract int configVersion { get; }
+		public abstract int ConfigVersion { get; }
 		public virtual bool configNeedsUpdate { get; set; }
 
-		public abstract int windowID { get; }
+		public abstract int WindowID { get; }
 		public abstract bool configDirty { get; set; }
 		public abstract bool powerAvailable	{ get; protected set; }
 
-		public abstract List<IVOID_Module> Modules { get; }
+		public abstract IList<IVOID_Module> Modules { get; }
 
-		public abstract float updateTimer { get; protected set; }
-		public abstract double updatePeriod { get; }
+		public abstract float UpdateTimer { get; protected set; }
+		public abstract double UpdatePeriod { get; }
 
 		public virtual float saveTimer { get; protected set; }
 
 		public abstract GUISkin Skin { get; }
 
 		public abstract CelestialBody HomeBody { get; }
-		public abstract List<CelestialBody> allBodies { get; }
-		public abstract List<CelestialBody> sortedBodyList { get; protected set; }
+		public abstract IList<CelestialBody> AllBodies { get; }
+		public abstract List<CelestialBody> SortedBodyList { get; protected set; }
 
-		public abstract List<VesselType> allVesselTypes { get; }
-
+		public abstract VesselType[] AllVesselTypes { get; protected set; }
 		public abstract Stage LastStage { get; protected set; }
 		public abstract Stage[] Stages { get; protected set; }
 
@@ -74,20 +71,14 @@
 
 		public override void LoadConfig()
 		{
-			var config = KSP.IO.PluginConfiguration.CreateForType<VOIDCore>(null);
-
-			useToolbarManager = config.GetValue("UseToolbarManager", useToolbarManager);
-
 			base.LoadConfig();
 		}
 
 		public abstract void SaveConfig();
 
-		public override void _SaveToConfig(KSP.IO.PluginConfiguration config)
+		public override void Save(KSP.IO.PluginConfiguration config)
 		{
-			config.SetValue("UseToolbarManager", useToolbarManager);
-
-			base._SaveToConfig(config);
+			base.Save(config);
 		}
 	}
 

--- a/API/VOIDMaster.cs
+++ b/API/VOIDMaster.cs
@@ -75,7 +75,7 @@
 
 			this.Core.Update ();
 
-			if (this.Core.factoryReset)
+			if (this.Core.FactoryReset)
 			{
 				this.LogDebug("Factory reset is true; deleting config and disposing!");
 

--- a/API/VOID_HUDModule.cs
+++ b/API/VOID_HUDModule.cs
@@ -56,11 +56,11 @@
 			{
 				if (this._colorIndex >= this.textColors.Count - 1)
 				{
-					this._colorIndex = 0;
+					this._colorIndex.value = 0;
 					return;
 				}
 
-				this._colorIndex = value;
+				this._colorIndex.value = value;
 			}
 		}
 
@@ -72,7 +72,7 @@
 
 		public VOID_HUDModule() : base()
 		{
-			this._colorIndex = 0;
+			this._colorIndex = (VOID_SaveValue<int>)0;
 
 			this.textColors = new List<Color>();
 
@@ -86,7 +86,7 @@
 			this.textColors.Add(Color.cyan);
 			this.textColors.Add(Color.magenta);
 
-			this.positionsLocked = true;
+			this.positionsLocked = (VOID_SaveValue<bool>)true;
 
 			this.Windows = new List<HUDWindow>();
 		}
@@ -107,7 +107,7 @@
 			foreach (HUDWindow window in this.Windows)
 			{
 				window.WindowPos = GUILayout.Window(
-					this.core.windowID,
+					this.core.WindowID,
 					window.WindowPos,
 					VOID_Tools.GetWindowHandler(window.WindowFunction),
 					GUIContent.none,
@@ -133,7 +133,7 @@
 				}
 			}
 
-			this.positionsLocked = GUITools.Toggle(this.positionsLocked, "Lock HUD Positions");
+			this.positionsLocked.value = GUITools.Toggle(this.positionsLocked, "Lock HUD Positions");
 		}
 
 		public override void LoadConfig()
@@ -152,9 +152,9 @@
 			}
 		}
 
-		public override void _SaveToConfig(KSP.IO.PluginConfiguration config)
-		{
-			base._SaveToConfig(config);
+		public override void Save(KSP.IO.PluginConfiguration config)
+		{
+			base.Save(config);
 
 			foreach (HUDWindow window in this.Windows)
 			{

--- a/API/VOID_Module.cs
+++ b/API/VOID_Module.cs
@@ -41,7 +41,7 @@
 		 * Fields
 		 * */
 		[AVOID_SaveValue("Active")]
-		protected VOID_SaveValue<bool> _Active = false;
+		protected VOID_SaveValue<bool> _Active = (VOID_SaveValue<bool>)false;
 		private GameScenes[] validScenes;
 		private Game.Modes[] validModes;
 
@@ -63,8 +63,8 @@
 			get
 			{
 				return (
-					(this.core.updateTimer - this.lastUpdate) > this.core.updatePeriod ||
-					this.lastUpdate > this.core.updateTimer
+					(this.core.UpdateTimer - this.lastUpdate) > this.core.UpdatePeriod ||
+					this.lastUpdate > this.core.UpdateTimer
 				);
 			}
 		}
@@ -77,7 +77,7 @@
 			}
 			set
 			{
-				this._Active = value && this.inValidGame && this.inValidScene;
+				this._Active.value = value && this.inValidGame && this.inValidScene;
 			}
 		}
 
@@ -142,15 +142,6 @@
 		{
 			get
 			{
-
-				Tools.PostDebugMessage(
-					this,
-					"Checking if scene is valid: LoadedScene={0}, ValidScenes={1}, inValidScene={2}",
-					Enum.GetName(typeof(GameScenes), HighLogic.LoadedScene),
-					string.Join(", ", this.ValidScenes.Select(s => Enum.GetName(typeof(GameScenes), s)).ToArray()),
-					this.ValidScenes.Contains(HighLogic.LoadedScene)
-				);
-
 				return this.ValidScenes.Contains(HighLogic.LoadedScene);
 			}
 		}
@@ -199,15 +190,6 @@
 		{
 			get
 			{
-
-				Tools.PostDebugMessage(
-					this,
-					"Checking if mode is valid: CurrentGame.Mode={0}, ValidModes={1}, inValidGame={2}",
-					Enum.GetName(typeof(Game.Modes), HighLogic.CurrentGame.Mode),
-					string.Join(", ", this.ValidModes.Select(m => Enum.GetName(typeof(Game.Modes), m)).ToArray()),
-					this.ValidModes.Contains(HighLogic.CurrentGame.Mode)
-				);
-
 				return this.ValidModes.Contains(HighLogic.CurrentGame.Mode);
 			}
 		}
@@ -229,7 +211,7 @@
 		/*
 		 * Methods
 		 * */
-		public void StartGUI()
+		public virtual void StartGUI()
 		{
 			if (!this.toggleActive || this.guiRunning)
 			{
@@ -240,7 +222,7 @@
 			RenderingManager.AddToPostDrawQueue (3, this.DrawGUI);
 		}
 
-		public void StopGUI()
+		public virtual void StopGUI()
 		{
 			if (!this.guiRunning)
 			{
@@ -367,7 +349,7 @@
 			}
 		}
 
-		public virtual void _SaveToConfig(KSP.IO.PluginConfiguration config)
+		public virtual void Save(KSP.IO.PluginConfiguration config)
 		{
 			foreach (var field in this.GetType().GetMembers(
 				BindingFlags.Instance |
@@ -430,6 +412,8 @@
 		protected float defWidth;
 		protected float defHeight;
 
+		protected bool decorateWindow;
+
 		protected string inputLockName;
 
 		public VOID_WindowModule() : base()
@@ -437,12 +421,44 @@
 			this.defWidth = 250f;
 			this.defHeight = 50f;
 
+			this.decorateWindow = true;
+
 			this.inputLockName = string.Concat(this.Name, "_edlock");
 
 			this.WindowPos = new Rect(Screen.width / 2, Screen.height / 2, this.defWidth, this.defHeight);
 		}
 
-		public abstract void ModuleWindow(int _);
+		public virtual void ModuleWindow(int id)
+		{
+			GUIStyle buttonStyle = this.core.Skin.button;
+			RectOffset padding = buttonStyle.padding;
+			RectOffset border = buttonStyle.border;
+
+			Rect closeRect = new Rect(
+				0f,
+				0f,
+				border.left + border.right,
+				border.top + border.bottom
+			);
+
+			closeRect.width = Mathf.Max(closeRect.width, 16f);
+			closeRect.height = Mathf.Max(closeRect.height, 16f);
+
+			closeRect.x = this.WindowPos.width - closeRect.width - 2f;
+			closeRect.y = 2f;
+
+			GUI.Button(closeRect, GUIContent.none, buttonStyle);
+
+			if (Event.current.type == EventType.repaint && Input.GetMouseButtonUp(0))
+			{
+				if (closeRect.Contains(Event.current.mousePosition))
+				{
+					this.toggleActive = false;
+				}
+			}
+
+			GUI.DragWindow();
+		}
 
 		public override void DrawGUI()
 		{
@@ -451,14 +467,12 @@
 			Rect _Pos = this.WindowPos;
 
 			_Pos = GUILayout.Window(
-				this.core.windowID,
+				this.core.WindowID,
 				_Pos,
 				VOID_Tools.GetWindowHandler(this.ModuleWindow),
 				this.Name,
 				GUILayout.Width(this.defWidth),
-				GUILayout.Height(this.defHeight),
-				GUILayout.ExpandWidth(true),
-				GUILayout.ExpandHeight(true)
+				GUILayout.Height(this.defHeight)
 			);
 
 			bool cursorInWindow = _Pos.Contains(Mouse.screenPos);

--- a/Tools/VOID_DataValue.cs
+++ b/Tools/VOID_DataValue.cs
@@ -71,8 +71,8 @@
 			get
 			{
 				if (
-					(VOID_Data.Core.updateTimer - this.lastUpdate > VOID_Data.Core.updatePeriod) ||
-					(this.lastUpdate > VOID_Data.Core.updateTimer)
+					(VOID_Data.Core.UpdateTimer - this.lastUpdate > VOID_Data.Core.UpdatePeriod) ||
+					(this.lastUpdate > VOID_Data.Core.UpdateTimer)
 				)
 				{
 					this.Refresh();
@@ -97,7 +97,7 @@
 		public void Refresh()
 		{
 			this.cache = this.ValueFunc.Invoke ();
-			this.lastUpdate = VOID_Data.Core.updateTimer;
+			this.lastUpdate = VOID_Data.Core.UpdateTimer;
 		}
 
 		public T GetFreshValue()

--- /dev/null
+++ b/Tools/VOID_Localization.cs
@@ -1,1 +1,36 @@
+// VOID
+//
+// VOID_Localization.cs
+//
+// Copyright © 2014, toadicus
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+//    this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation and/or other
+//    materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used
+//    to endorse or promote products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+public static class VOID_Localization
+{
+	public static string void_primary = "Primary";
+	public static string void_altitude_asl = "Altitude (ASL)";
+	public static string void_velocity = "Velocity";
+	public static string void_apoapsis = "Apoapsis";
+	public static string void_periapsis = "Periapsis";
+}

--- a/Tools/VOID_SaveValue.cs
+++ b/Tools/VOID_SaveValue.cs
@@ -66,11 +66,12 @@
 				if (this.Core != null && !System.Object.Equals(this._value, value))
 				{
 					Tools.PostDebugMessage (string.Format (
-						"VOID: Dirtying config for type {0} in method {1}." +
+						"VOID: Dirtying config for type {0}." +
 						"\n\t Old Value: {2}, New Value: {3}" +
-						"\n\t Object.Equals(New, Old): {4}",
+						"\n\t Object.Equals(New, Old): {4}\n" +
+						"{1}",
 						this._type,
-						new System.Diagnostics.StackTrace().GetFrame(1).GetMethod(),
+						new System.Diagnostics.StackTrace().ToString(),
 						this._value,
 						value,
 						System.Object.Equals(this._value, value)
@@ -107,7 +108,7 @@
 			return (T)v.value;
 		}
 
-		public static implicit operator VOID_SaveValue<T>(T v)
+		public static explicit operator VOID_SaveValue<T>(T v)
 		{
 			VOID_SaveValue<T> r = new VOID_SaveValue<T>();
 			r.type = v.GetType();

--- a/Tools/VOID_Tools.cs
+++ b/Tools/VOID_Tools.cs
@@ -363,6 +363,19 @@
 			}
 
 			return functionCache[hashCode];
+		}
+
+		public static void UncacheWindow(Action<int> func)
+		{
+			if (functionCache != null)
+			{
+				int hashCode = func.GetHashCode();
+
+				if (functionCache.ContainsKey(hashCode))
+				{
+					functionCache.Remove(hashCode);
+				}
+			}
 		}
 
 		/// <summary>

--- a/VOID.csproj
+++ b/VOID.csproj
@@ -83,7 +83,6 @@
     <Compile Include="VOID_VesselRegister.cs" />
     <Compile Include="VOID_DataLogger.cs" />
     <Compile Include="VOID_EditorHUD.cs" />
-    <Compile Include="VOID_Localization.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="VOID_HUDAdvanced.cs" />
     <Compile Include="VOID_TWR.cs" />
@@ -112,6 +111,8 @@
     <Compile Include="API\Attributes\AVOID_SaveValue.cs" />
     <Compile Include="API\VOIDMaster.cs" />
     <Compile Include="API\Attributes\VOID_GameModesAttribute.cs" />
+    <Compile Include="VOID_ConfigWindow.cs" />
+    <Compile Include="Tools\VOID_Localization.cs" />
   </ItemGroup>
   <ProjectExtensions>
     <MonoDevelop>

--- a/VOIDCore_Editor.cs
+++ b/VOIDCore_Editor.cs
@@ -39,11 +39,6 @@
 	[VOID_Scenes(GameScenes.EDITOR)]
 	public class VOIDCore_Editor : VOIDCore_Generic<VOIDCore_Editor>
 	{
-		public VOIDCore_Editor() : base()
-		{
-			this.Name = "VOID Core: Editor";
-		}
-
 		public override void FixedUpdate() {}
 	}
 }

--- a/VOIDCore_Flight.cs
+++ b/VOIDCore_Flight.cs
@@ -36,11 +36,6 @@
 	[VOID_Scenes(GameScenes.FLIGHT)]
 	public class VOIDCore_Flight : VOIDCore_Generic<VOIDCore_Flight>
 	{
-		public VOIDCore_Flight()
-		{
-			base.Name = "VOID Core: Flight";
-		}
-
 		public override void DrawConfigurables()
 		{
 			if (HighLogic.LoadedSceneIsFlight)

--- a/VOIDCore_Generic.cs
+++ b/VOIDCore_Generic.cs
@@ -47,21 +47,10 @@
 		protected string VoidVersion;
 
 		[AVOID_SaveValue("configValue")]
-		protected VOID_SaveValue<int> _configVersion = VOIDCore.CONFIG_VERSION;
-
-		protected List<IVOID_Module> _modules = new List<IVOID_Module>();
-		protected bool _modulesLoaded = false;
-
-		[AVOID_SaveValue("mainWindowPos")]
-		protected VOID_SaveValue<Rect> mainWindowPos = new Rect(475, 575, 10f, 10f);
-		[AVOID_SaveValue("mainGuiMinimized")]
-		protected VOID_SaveValue<bool> mainGuiMinimized = false;
-
-		[AVOID_SaveValue("configWindowPos")]
-		protected VOID_SaveValue<Rect> configWindowPos = new Rect(825, 625, 10f, 10f);
-		[AVOID_SaveValue("configWindowMinimized")]
-
-		protected VOID_SaveValue<bool> configWindowMinimized = true;
+		protected VOID_SaveValue<int> configVersion = (VOID_SaveValue<int>)VOIDCore.CONFIG_VERSION;
+
+		protected List<IVOID_Module> modules = new List<IVOID_Module>();
+		protected bool modulesLoaded = false;
 
 		protected Texture2D VOIDIconTexture;
 		protected string VOIDIconOnActivePath;
@@ -69,45 +58,46 @@
 		protected string VOIDIconOffActivePath;
 		protected string VOIDIconOffInactivePath;
 
+		private bool _useToolbarManager;
+
 		protected GUIStyle iconStyle;
 
 		protected int windowBaseID = -96518722;
-		protected int _windowID = 0;
+		protected int windowID = 0;
 
 		protected bool GUIStylesLoaded = false;
 
-		protected CelestialBody _homeBody;
+		protected CelestialBody homeBody;
 
 		[AVOID_SaveValue("togglePower")]
-		public VOID_SaveValue<bool> togglePower = true;
+		public VOID_SaveValue<bool> togglePower = (VOID_SaveValue<bool>)true;
 
 		public override bool powerAvailable { get; protected set; }
 
 		[AVOID_SaveValue("consumeResource")]
-		protected VOID_SaveValue<bool> consumeResource = false;
+		protected VOID_SaveValue<bool> consumeResource = (VOID_SaveValue<bool>)false;
 
 		[AVOID_SaveValue("resourceName")]
-		protected VOID_SaveValue<string> resourceName = "ElectricCharge";
+		protected VOID_SaveValue<string> resourceName = (VOID_SaveValue<string>)"ElectricCharge";
 
 		[AVOID_SaveValue("resourceRate")]
-		protected VOID_SaveValue<float> resourceRate = 0.2f;
+		protected VOID_SaveValue<float> resourceRate = (VOID_SaveValue<float>)0.2f;
 
 		[AVOID_SaveValue("updatePeriod")]
-		protected VOID_SaveValue<double> _updatePeriod = 1001f / 15000f;
+		protected VOID_SaveValue<double> updatePeriod = (VOID_SaveValue<double>)(1001f / 15000f);
 		protected string stringFrequency;
 
 		[AVOID_SaveValue("vesselSimActive")]
 		protected VOID_SaveValue<bool> vesselSimActive;
 
 		// Vessel Type Housekeeping
-		protected List<VesselType> _allVesselTypes = new List<VesselType>();
 		protected bool vesselTypesLoaded = false;
 
 		protected string defaultSkin = "KSP window 2";
 
 		[AVOID_SaveValue("defaultSkin")]
-		protected VOID_SaveValue<string> _skinName;
-		protected int _skinIdx;
+		protected VOID_SaveValue<string> skinName;
+		protected int skinIdx;
 
 		protected Dictionary<string, GUISkin> validSkins;
 		protected string[] skinNames;
@@ -119,6 +109,7 @@
 				"ExperimentsDialogSkin",
 				"ExpRecoveryDialogSkin",
 				"KSP window 1",
+				"KSP window 3",
 				"KSP window 5",
 				"KSP window 6",
 				"PartTooltipSkin",
@@ -135,25 +126,56 @@
 		/*
 		 * Properties
 		 * */
-		public override int configVersion
+
+		public override IList<CelestialBody> AllBodies
 		{
 			get
 			{
-				return this._configVersion;
-			}
-		}
-
-		public bool factoryReset
+				return FlightGlobals.Bodies.AsReadOnly();
+			}
+		}
+
+		public override VesselType[] AllVesselTypes
 		{
 			get;
 			protected set;
 		}
 
-		public override List<IVOID_Module> Modules
+		public override int ConfigVersion
 		{
 			get
 			{
-				return this._modules;
+				return this.configVersion;
+			}
+		}
+
+		public bool FactoryReset
+		{
+			get;
+			protected set;
+		}
+
+		public override CelestialBody HomeBody
+		{
+			get
+			{
+				if (this.homeBody == null)
+				{
+					if (Planetarium.fetch != null)
+					{
+						this.homeBody = Planetarium.fetch.Home;
+					}
+				}
+
+				return this.homeBody;
+			}
+		}
+
+		public override IList<IVOID_Module> Modules
+		{
+			get
+			{
+				return this.modules.AsReadOnly();
 			}
 		}
 
@@ -165,7 +187,7 @@
 				{
 					try
 					{
-						return this.validSkins[this._skinName];
+						return this.validSkins[this.skinName];
 					}
 					catch
 					{
@@ -176,68 +198,35 @@
 			}
 		}
 
-		public override int windowID
-		{
-			get
-			{
-				if (this._windowID == 0)
-				{
-					this._windowID = this.windowBaseID;
-				}
-				return this._windowID++;
-			}
-		}
-
-		public override List<CelestialBody> allBodies
-		{
-			get
-			{
-				return FlightGlobals.Bodies;
-			}
-		}
-
-		public override List<CelestialBody> sortedBodyList
+		public override List<CelestialBody> SortedBodyList
 		{
 			get;
 			protected set;
 		}
 
-		public override CelestialBody HomeBody
+		public override double UpdatePeriod
 		{
 			get
 			{
-				if (this._homeBody == null)
-				{
-					if (Planetarium.fetch != null)
-					{
-						this._homeBody = Planetarium.fetch.Home;
-					}
-				}
-
-				return this._homeBody;
-			}
-		}
-
-		public override List<VesselType> allVesselTypes
-		{
-			get
-			{
-				return this._allVesselTypes;
-			}
-		}
-
-		public override float updateTimer
+				return this.updatePeriod;
+			}
+		}
+
+		public override float UpdateTimer
 		{
 			get;
 			protected set;
 		}
 
-
-		public override double updatePeriod
+		public override int WindowID
 		{
 			get
 			{
-				return this._updatePeriod;
+				if (this.windowID == 0)
+				{
+					this.windowID = this.windowBaseID;
+				}
+				return this.windowID++;
 			}
 		}
 
@@ -253,6 +242,22 @@
 			protected set;
 		}
 
+		protected IconState activeState
+		{
+			get
+			{
+				if (this.toggleActive)
+				{
+					return IconState.Inactive;
+				}
+				else
+				{
+					return IconState.Active;
+				}
+
+			}
+		}
+
 		protected IconState powerState
 		{
 			get
@@ -269,31 +274,23 @@
 			}
 		}
 
-		protected IconState activeState
+		protected virtual ApplicationLauncher.AppScenes appIconVisibleScenes
 		{
 			get
 			{
-				if (this.mainGuiMinimized)
-				{
-					return IconState.Inactive;
-				}
-				else
-				{
-					return IconState.Active;
-				}
-
-			}
-		}
-
-		protected bool UseToolbarManager
+				return HighLogic.LoadedScene.ToAppScenes();
+			}
+		}
+
+		protected bool useToolbarManager
 		{
 			get
 			{
-				return useToolbarManager & ToolbarManager.ToolbarAvailable;
+				return _useToolbarManager & ToolbarManager.ToolbarAvailable;
 			}
 			set
 			{
-				if (useToolbarManager == value)
+				if (_useToolbarManager == value)
 				{
 					return;
 				}
@@ -314,15 +311,7 @@
 					this.InitializeToolbarButton();
 				}
 
-				useToolbarManager = value;
-			}
-		}
-
-		protected virtual ApplicationLauncher.AppScenes appIconVisibleScenes
-		{
-			get
-			{
-				return HighLogic.LoadedScene.ToAppScenes();
+				_useToolbarManager = value;
 			}
 		}
 
@@ -337,9 +326,9 @@
 		 * */
 		public override void DrawGUI()
 		{
-			this._windowID = this.windowBaseID;
-
-			if (!this._modulesLoaded)
+			this.windowID = this.windowBaseID;
+
+			if (!this.modulesLoaded)
 			{
 				this.LoadModulesOfType<IVOID_Module>();
 			}
@@ -359,10 +348,10 @@
 					this,
 					"ToolbarAvailable: {0}, UseToobarManager: {1}",
 					ToolbarManager.ToolbarAvailable,
-					this.UseToolbarManager);
-			}
-
-			if (!this.UseToolbarManager)
+					this.useToolbarManager);
+			}
+
+			if (!this.useToolbarManager)
 			{
 				if (this.AppLauncherButton == null)
 				{
@@ -384,63 +373,9 @@
 				this.InitializeToolbarButton();
 			}
 
-			if (!this.mainGuiMinimized)
-			{
-
-				Rect _mainWindowPos = this.mainWindowPos;
-
-				_mainWindowPos = GUILayout.Window(
-					this.windowID,
-					_mainWindowPos,
-					VOID_Tools.GetWindowHandler(this.VOIDMainWindow),
-					string.Join(" ", new string[] { this.VoidName, this.VoidVersion }),
-					GUILayout.Width(250f),
-					GUILayout.Height(50f),
-					GUILayout.ExpandWidth(true),
-					GUILayout.ExpandHeight(true)
-				);
-
-				if (HighLogic.LoadedSceneIsEditor)
-				{
-					_mainWindowPos = Tools.ClampRectToEditorPad(_mainWindowPos);
-				}
-				else
-				{
-					_mainWindowPos = Tools.ClampRectToScreen(_mainWindowPos);
-				}
-
-				if (_mainWindowPos != this.mainWindowPos)
-				{
-					this.mainWindowPos = _mainWindowPos;
-				}
-			}
-
-			if (!this.configWindowMinimized && !this.mainGuiMinimized)
-			{
-				Rect _configWindowPos = this.configWindowPos;
-
-				_configWindowPos = GUILayout.Window(
-					this.windowID,
-					_configWindowPos,
-					VOID_Tools.GetWindowHandler(this.VOIDConfigWindow),
-					string.Join(" ", new string[] { this.VoidName, "Configuration" }),
-					GUILayout.Width(250),
-					GUILayout.Height(50)
-				);
-
-				if (HighLogic.LoadedSceneIsEditor)
-				{
-					_configWindowPos = Tools.ClampRectToEditorPad(_configWindowPos);
-				}
-				else
-				{
-					_configWindowPos = Tools.ClampRectToScreen(_configWindowPos);
-				}
-
-				if (_configWindowPos != this.configWindowPos)
-				{
-					this.configWindowPos = _configWindowPos;
-				}
+			if (this.toggleActive)
+			{
+				base.DrawGUI();
 			}
 		}
 
@@ -469,7 +404,7 @@
 				this.StartGUI();
 			}
 
-			foreach (IVOID_Module module in this.Modules)
+			foreach (IVOID_Module module in this.modules)
 			{
 				if (
 					!module.guiRunning &&
@@ -489,7 +424,7 @@
 						!module.toggleActive ||
 					    !this.togglePower ||
 						!module.inValidScene ||
-					    this.factoryReset ||
+					    this.FactoryReset ||
 						(
 							HighLogic.LoadedSceneIsEditor &&
 							(EditorLogic.RootPart == null || EditorLogic.SortedShipList.Count == 0)
@@ -507,7 +442,7 @@
 			}
 
 			this.CheckAndSave();
-			this.updateTimer += Time.deltaTime;
+			this.UpdateTimer += Time.deltaTime;
 		}
 
 		public virtual void FixedUpdate()
@@ -539,7 +474,7 @@
 				}
 			}
 
-			foreach (IVOID_Module module in this.Modules)
+			foreach (IVOID_Module module in this.modules)
 			{
 				if (module is IVOID_BehaviorModule)
 				{
@@ -550,7 +485,7 @@
 
 		public void OnDestroy()
 		{
-			foreach (IVOID_Module module in this.Modules)
+			foreach (IVOID_Module module in this.modules)
 			{
 				if (module is IVOID_BehaviorModule)
 				{
@@ -571,11 +506,19 @@
 			this.OnDestroy();
 		}
 
+		public override void StartGUI()
+		{
+			if (!this.guiRunning)
+			{
+				RenderingManager.AddToPostDrawQueue(3, this.DrawGUI);
+			}
+		}
+
 		public void ResetGUI()
 		{
 			this.StopGUI();
 
-			foreach (IVOID_Module module in this.Modules)
+			foreach (IVOID_Module module in this.modules)
 			{
 				module.StopGUI();
 				module.StartGUI();
@@ -584,7 +527,7 @@
 			this.StartGUI();
 		}
 
-		public void VOIDMainWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			GUILayout.BeginVertical();
 
@@ -604,8 +547,13 @@
 
 				if (togglePower || !HighLogic.LoadedSceneIsFlight)
 				{
-					foreach (IVOID_Module module in this.Modules)
+					foreach (IVOID_Module module in this.modules)
 					{
+						if (module is VOID_ConfigWindow)
+						{
+							continue;
+						}
+
 						module.toggleActive = GUITools.Toggle(module.toggleActive, module.Name);
 					}
 				}
@@ -615,27 +563,21 @@
 				GUILayout.Label("-- POWER LOST --", VOID_Styles.labelRed);
 			}
 
-			this.configWindowMinimized.value = !GUITools.Toggle(!this.configWindowMinimized, "Configuration");
+			VOID_ConfigWindow.Instance.toggleActive = GUITools.Toggle(
+				VOID_ConfigWindow.Instance.toggleActive,
+				"Configuration"
+			);
 
 			GUILayout.EndVertical();
-			GUI.DragWindow();
-		}
-
-		public void VOIDConfigWindow(int _)
-		{
-			GUILayout.BeginVertical();
-
-			this.DrawConfigurables();
-
-			GUILayout.EndVertical();
-			GUI.DragWindow();
+
+			base.ModuleWindow(id);
 		}
 
 		public override void DrawConfigurables()
 		{
 			GUIContent _content;
 
-			this.UseToolbarManager = GUITools.Toggle(this.UseToolbarManager, "Use Blizzy's Toolbar If Available");
+			this.useToolbarManager = GUITools.Toggle(this.useToolbarManager, "Use Blizzy's Toolbar If Available");
 
 			this.vesselSimActive.value = GUITools.Toggle(this.vesselSimActive.value,
 				"Enable Engineering Calculations");
@@ -650,11 +592,11 @@
 			_content.tooltip = "Select previous skin";
 			if (GUILayout.Button(_content, GUILayout.ExpandWidth(true)))
 			{
-				this._skinIdx--;
+				this.skinIdx--;
 				Tools.PostDebugMessage(string.Format(
-					"{0}: new this._skinIdx = {1} :: skin_list.Count = {2}",
+					"{0}: new this.skinIdx = {1} :: skin_list.Count = {2}",
 					this.GetType().Name,
-					this._skinName,
+					this.skinName,
 					this.validSkins.Count
 				));
 			}
@@ -667,24 +609,24 @@
 			_content.tooltip = "Select next skin";
 			if (GUILayout.Button(_content, GUILayout.ExpandWidth(true)))
 			{
-				this._skinIdx++;
+				this.skinIdx++;
 				Tools.PostDebugMessage(string.Format(
-					"{0}: new this._skinIdx = {1} :: skin_list.Count = {2}",
+					"{0}: new this.skinIdx = {1} :: skin_list.Count = {2}",
 					this.GetType().Name,
-					this._skinName,
+					this.skinName,
 					this.validSkins.Count
 				));
 			}
 
-			this._skinIdx %= this.skinNames.Length;
-			if (this._skinIdx < 0)
-			{
-				this._skinIdx += this.skinNames.Length;
-			}
-
-			if (this._skinName != skinNames[this._skinIdx])
-			{
-				this._skinName.value = skinNames[this._skinIdx];
+			this.skinIdx %= this.skinNames.Length;
+			if (this.skinIdx < 0)
+			{
+				this.skinIdx += this.skinNames.Length;
+			}
+
+			if (this.skinName != skinNames[this.skinIdx])
+			{
+				this.skinName.value = skinNames[this.skinIdx];
 				this.GUIStylesLoaded = false;
 			}
 
@@ -694,39 +636,30 @@
 			GUILayout.Label("Update Rate (Hz):");
 			if (this.stringFrequency == null)
 			{
-				this.stringFrequency = (1f / this.updatePeriod).ToString();
+				this.stringFrequency = (1f / this.UpdatePeriod).ToString();
 			}
 			this.stringFrequency = GUILayout.TextField(this.stringFrequency.ToString(), 5, GUILayout.ExpandWidth(true));
 
 			if (GUILayout.Button("Apply"))
 			{
-				double updateFreq = 1f / this.updatePeriod;
+				double updateFreq = 1f / this.UpdatePeriod;
 				double.TryParse(stringFrequency, out updateFreq);
-				this._updatePeriod = 1 / updateFreq;
+				this.updatePeriod.value = 1 / updateFreq;
 			}
 			GUILayout.EndHorizontal();
 
-			foreach (IVOID_Module mod in this.Modules)
+			foreach (IVOID_Module mod in this.modules)
 			{
 				mod.DrawConfigurables();
 			}
 
-			this.factoryReset = GUITools.Toggle(this.factoryReset, "Factory Reset");
+			this.FactoryReset = GUITools.Toggle(this.FactoryReset, "Factory Reset");
 		}
 
 		protected void UpdateSimManager()
 		{
 			if (SimManager.ResultsReady())
 			{
-				Tools.PostDebugMessage(this, "VesselSimulator results ready, setting Stages.");
-
-				this.Stages = SimManager.Stages;
-
-				if (this.Stages != null)
-				{
-					this.LastStage = this.Stages.Last();
-				}
-
 				if (HighLogic.LoadedSceneIsEditor)
 				{
 					SimManager.Gravity = VOID_Data.KerbinGee;
@@ -737,7 +670,7 @@
 					SimManager.Gravity = this.vessel.mainBody.gravParameter / (radius * radius);
 				}
 
-				SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)(this.updatePeriod * 1000d));
+				SimManager.minSimTime = new TimeSpan(0, 0, 0, 0, (int)(this.UpdatePeriod * 1000d));
 
 				SimManager.TryStartSimulation();
 			}
@@ -747,6 +680,18 @@
 				Tools.PostDebugMessage(this, "VesselSimulator results not ready.");
 			}
 			#endif
+		}
+
+		protected void GetSimManagerResults()
+		{
+			Tools.PostDebugMessage(this, "VesselSimulator results ready, setting Stages.");
+
+			this.Stages = SimManager.Stages;
+
+			if (this.Stages != null)
+			{
+				this.LastStage = this.Stages.Last();
+			}
 		}
 
 		protected void LoadModulesOfType<U>()
@@ -770,46 +715,6 @@
 
 					sb.AppendFormat("Checking IVOID_Module type {0}...", loadedType.Name);
 
-					GameScenes[] validScenes = null;
-
-					foreach (var attr in loadedType.GetCustomAttributes(true))
-					{
-						if (attr is VOID_ScenesAttribute)
-						{
-							validScenes = ((VOID_ScenesAttribute)attr).ValidScenes;
-
-							sb.Append("VOID_ScenesAttribute found;");
-
-							break;
-						}
-					}
-
-					if (validScenes == null)
-					{
-						validScenes = new GameScenes[] { GameScenes.FLIGHT };
-
-
-						sb.Append("VOID_ScenesAttribute not found;");
-
-					}
-
-					sb.AppendFormat(
-						" validScenes set to {0}.",
-						string.Join(
-							", ",
-							validScenes.Select(s => Enum.GetName(typeof(GameScenes), s)).ToArray()
-						)
-					);
-
-					if (!validScenes.Contains(HighLogic.LoadedScene))
-					{
-						sb.AppendFormat("  {0} not found in validScenes, skipping.",
-							Enum.GetName(typeof(GameScenes), HighLogic.LoadedScene));
-						continue;
-					}
-
-					sb.AppendFormat("Loading IVOID_Module type {0}...", loadedType.Name);
-
 					try
 					{
 						this.LoadModule(loadedType);
@@ -826,7 +731,7 @@
 				}
 			}
 
-			this._modulesLoaded = true;
+			this.modulesLoaded = true;
 
 			sb.AppendFormat("Loaded {0} modules.\n", this.Modules.Count);
 
@@ -835,7 +740,7 @@
 
 		protected void LoadModule(Type T)
 		{
-			var existingModules = this._modules.Where(mod => mod.GetType().Name == T.Name);
+			var existingModules = this.modules.Where(mod => mod.GetType().Name == T.Name);
 			if (existingModules.Any())
 			{
 				Tools.PostDebugMessage(string.Format(
@@ -868,14 +773,17 @@
 				module = Activator.CreateInstance(T) as IVOID_Module;
 			}
 
-			module.LoadConfig();
-			this._modules.Add(module);
-
-			Tools.PostDebugMessage(string.Format(
-				"{0}: loaded module {1}.",
-				this.GetType().Name,
-				T.Name
-			));
+			if (module.inValidGame && module.inValidScene)
+			{
+				module.LoadConfig();
+				this.modules.Add(module);
+
+				Tools.PostDebugMessage(string.Format(
+						"{0}: loaded module {1}.",
+						this.GetType().Name,
+						T.Name
+					));
+			}
 		}
 
 		protected void LoadSkins()
@@ -908,29 +816,29 @@
 
 			for (int i = 0; i < this.skinNames.Length; i++)
 			{
-				if (this.skinNames[i] == this._skinName)
-				{
-					this._skinIdx = i;
+				if (this.skinNames[i] == this.skinName)
+				{
+					this.skinIdx = i;
 				}
 				if (this.skinNames[i] == this.defaultSkin)
 				{
 					defaultIdx = i;
 				}
-				if (this._skinIdx != int.MinValue && defaultIdx != int.MinValue)
+				if (this.skinIdx != int.MinValue && defaultIdx != int.MinValue)
 				{
 					break;
 				}
 			}
 
-			if (this._skinIdx == int.MinValue)
-			{
-				this._skinIdx = defaultIdx;
+			if (this.skinIdx == int.MinValue)
+			{
+				this.skinIdx = defaultIdx;
 			}
 
 			Tools.PostDebugMessage(string.Format(
 				"{0}: _skinIdx = {1}.",
 				this.GetType().Name,
-				this._skinName.ToString()
+				this.skinName.ToString()
 			));
 
 			this.skinsLoaded = true;
@@ -950,7 +858,7 @@
 
 		protected void LoadVesselTypes()
 		{
-			this._allVesselTypes = Enum.GetValues(typeof(VesselType)).OfType<VesselType>().ToList();
+			this.AllVesselTypes = Enum.GetValues(typeof(VesselType)).OfType<VesselType>().ToArray();
 			this.vesselTypesLoaded = true;
 		}
 
@@ -961,13 +869,13 @@
 				this.LoadVesselTypes();
 			}
 
-			if (this.sortedBodyList == null && FlightGlobals.Bodies != null && FlightGlobals.Bodies.Count > 0)
-			{
-				this.sortedBodyList = new List<CelestialBody>(FlightGlobals.Bodies);
-				this.sortedBodyList.Sort(new CBListComparer());
-				this.sortedBodyList.Reverse();
-
-				Debug.Log(string.Format("sortedBodyList: {0}", string.Join("\n\t", this.sortedBodyList.Select(b => b.bodyName).ToArray())));
+			if (this.SortedBodyList == null && FlightGlobals.Bodies != null && FlightGlobals.Bodies.Count > 0)
+			{
+				this.SortedBodyList = new List<CelestialBody>(FlightGlobals.Bodies);
+				this.SortedBodyList.Sort(new CBListComparer());
+				this.SortedBodyList.Reverse();
+
+				Debug.Log(string.Format("sortedBodyList: {0}", string.Join("\n\t", this.SortedBodyList.Select(b => b.bodyName).ToArray())));
 			}
 
 		}
@@ -1019,7 +927,7 @@
 
 		protected void ToggleMainWindow()
 		{
-			this.mainGuiMinimized = !this.mainGuiMinimized;
+			this.toggleActive = !this.toggleActive;
 			this.SetIconTexture(this.powerState | this.activeState);
 		}
 
@@ -1085,7 +993,7 @@
 		{
 			base.LoadConfig();
 
-			foreach (IVOID_Module module in this.Modules)
+			foreach (IVOID_Module module in this.modules)
 			{
 				module.LoadConfig();
 			}
@@ -1102,11 +1010,11 @@
 
 			config.load();
 
-			this._SaveToConfig(config);
-
-			foreach (IVOID_Module module in this.Modules)
-			{
-				module._SaveToConfig(config);
+			this.Save(config);
+
+			foreach (IVOID_Module module in this.modules)
+			{
+				module.Save(config);
 			}
 
 			config.save();
@@ -1116,18 +1024,18 @@
 
 		public VOIDCore_Generic()
 		{
-			this.Name = "VOID Core";
-
 			System.Version version = this.GetType().Assembly.GetName().Version;
 
 			this.VoidVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.MajorRevision);
 
+			this.Name = string.Format("VOID {0}", this.VoidVersion.ToString());
+
 			this.powerAvailable = true;
 
 			this.toggleActive = true;
 
-			this._skinName = this.defaultSkin;
-			this._skinIdx = int.MinValue;
+			this.skinName = (VOID_SaveValue<string>)this.defaultSkin;
+			this.skinIdx = int.MinValue;
 
 			this.VOIDIconOnActivePath = "VOID/Textures/void_icon_light_glow";
 			this.VOIDIconOnInactivePath = "VOID/Textures/void_icon_dark_glow";
@@ -1135,24 +1043,28 @@
 			this.VOIDIconOffInactivePath = "VOID/Textures/void_icon_dark";
 
 			this.saveTimer = 0f;
-			this.updateTimer = 0f;
-
-			this.vesselSimActive = true;
-
-			this.UseToolbarManager = ToolbarManager.ToolbarAvailable;
+			this.UpdateTimer = 0f;
+
+			this.vesselSimActive = (VOID_SaveValue<bool>)true;
+			SimManager.Atmosphere = 0d;
+			SimManager.OnReady += this.GetSimManagerResults;
+
+			this.useToolbarManager = ToolbarManager.ToolbarAvailable;
 
 			this.LoadConfig();
 
-			this._configVersion = VOIDCore.CONFIG_VERSION;
+			this.configVersion = (VOID_SaveValue<int>)VOIDCore.CONFIG_VERSION;
 			
 			this.SetIconTexture(this.powerState | this.activeState);
 
-			this.factoryReset = false;
+			this.FactoryReset = false;
 		}
 
 		public virtual void Dispose()
 		{
 			this.StopGUI();
+
+			this.onSkinChanged(this);
 
 			if (this.AppLauncherButton != null)
 			{
@@ -1179,4 +1091,3 @@
 	}
 }
 
-

--- a/VOIDCore_SpaceCentre.cs
+++ b/VOIDCore_SpaceCentre.cs
@@ -32,11 +32,6 @@
 	[VOID_Scenes(GameScenes.SPACECENTER)]
 	public class VOIDCore_SpaceCentre : VOIDCore_Generic<VOIDCore_SpaceCentre>
 	{
-		public VOIDCore_SpaceCentre() : base()
-		{
-			base.Name = "VOID Core: SpaceCentre";
-		}
-
 		public override void FixedUpdate() {}
 	}
 }

--- a/VOID_CBInfoBrowser.cs
+++ b/VOID_CBInfoBrowser.cs
@@ -37,22 +37,22 @@
 	public class VOID_CBInfoBrowser : VOID_WindowModule
 	{
 		[AVOID_SaveValue("selectedBodyIdx1")]
-		protected VOID_SaveValue<int> selectedBodyIdx1 = 1;
+		protected VOID_SaveValue<int> selectedBodyIdx1;
 
 		[AVOID_SaveValue("selectedBodyIdx2")]
-		protected VOID_SaveValue<int> selectedBodyIdx2 = 2;
+		protected VOID_SaveValue<int> selectedBodyIdx2;
 
 		protected CelestialBody selectedBody1;
 		protected CelestialBody selectedBody2;
 
 		[AVOID_SaveValue("toggleOrbital")]
-		protected VOID_SaveValue<bool> toggleOrbital = false;
+		protected VOID_SaveValue<bool> toggleOrbital;
 
 		[AVOID_SaveValue("togglePhysical")]
-		protected VOID_SaveValue<bool> togglePhysical = false;
+		protected VOID_SaveValue<bool> togglePhysical;
 
 		[AVOID_SaveValue("toggleScience")]
-		protected VOID_SaveValue<bool> toggleScience = false;
+		protected VOID_SaveValue<bool> toggleScience;
 
 		public VOID_CBInfoBrowser()
 		{
@@ -60,9 +60,16 @@
 
 			this.WindowPos.x = 10;
 			this.WindowPos.y = 85;
+
+			this.selectedBodyIdx1 = (VOID_SaveValue<int>)1;
+			this.selectedBodyIdx2 = (VOID_SaveValue<int>)2;
+
+			this.toggleOrbital = (VOID_SaveValue<bool>)false;
+			this.togglePhysical = (VOID_SaveValue<bool>)false;
+			this.toggleScience = (VOID_SaveValue<bool>)false;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 
@@ -75,20 +82,26 @@
 
 			GUILayout.BeginVertical(GUILayout.Width(150));
 
-			selectedBody1 = this.core.allBodies[selectedBodyIdx1];
-			selectedBody2 = this.core.allBodies[selectedBodyIdx2];
+			selectedBody1 = this.core.AllBodies[selectedBodyIdx1];
+			selectedBody2 = this.core.AllBodies[selectedBodyIdx2];
 
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("<", GUILayout.ExpandWidth(false)))
 			{
-				selectedBodyIdx1--;
-				if (selectedBodyIdx1 < 0) selectedBodyIdx1 = this.core.allBodies.Count - 1;
-			}
-			GUILayout.Label(this.core.allBodies[selectedBodyIdx1].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
+				selectedBodyIdx1.value--;
+				if (selectedBodyIdx1 < 0)
+				{
+					selectedBodyIdx1.value = this.core.AllBodies.Count - 1;
+				}
+			}
+			GUILayout.Label(this.core.AllBodies[selectedBodyIdx1].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
 			if (GUILayout.Button(">", GUILayout.ExpandWidth(false)))
 			{
-				selectedBodyIdx1++;
-				if (selectedBodyIdx1 > this.core.allBodies.Count - 1) selectedBodyIdx1 = 0;
+				selectedBodyIdx1.value++;
+				if (selectedBodyIdx1 > this.core.AllBodies.Count - 1)
+				{
+					selectedBodyIdx1.value = 0;
+				}
 			}
 			GUILayout.EndHorizontal();
 			GUILayout.EndVertical();
@@ -97,14 +110,20 @@
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("<", GUILayout.ExpandWidth(false)))
 			{
-				selectedBodyIdx2--;
-				if (selectedBodyIdx2 < 0) selectedBodyIdx2 = this.core.allBodies.Count - 1;
-			}
-			GUILayout.Label(this.core.allBodies[selectedBodyIdx2].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
+				selectedBodyIdx2.value--;
+				if (selectedBodyIdx2 < 0)
+				{
+					selectedBodyIdx2.value = this.core.AllBodies.Count - 1;
+				}
+			}
+			GUILayout.Label(this.core.AllBodies[selectedBodyIdx2].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
 			if (GUILayout.Button(">", GUILayout.ExpandWidth(false)))
 			{
-				selectedBodyIdx2++;
-				if (selectedBodyIdx2 > this.core.allBodies.Count - 1) selectedBodyIdx2 = 0;
+				selectedBodyIdx2.value++;
+				if (selectedBodyIdx2 > this.core.AllBodies.Count - 1)
+				{
+					selectedBodyIdx2.value = 0;
+				}
 			}
 			GUILayout.EndHorizontal();
 			GUILayout.EndVertical();
@@ -277,7 +296,7 @@
 				GUILayout.EndHorizontal();
 			}
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 
 		private void body_OP_show_orbital_info(CelestialBody body)

--- a/VOID_CareerStatus.cs
+++ b/VOID_CareerStatus.cs
@@ -151,7 +151,7 @@
 			base.DrawGUI();
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			GUILayout.BeginVertical();
 
@@ -178,7 +178,7 @@
 
 			GUILayout.EndVertical();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 
 		// TODO: Update event handlers to do something useful with the new "reasons" parameter.
@@ -233,7 +233,10 @@
 		 * */
 		public VOID_CareerStatus() : base()
 		{
-			VOID_CareerStatus.Instance = this;
+			if (this.inValidGame && this.inValidScene)
+			{
+				VOID_CareerStatus.Instance = this;
+			}
 
 			this.Name = "Career Status";
 

--- /dev/null
+++ b/VOID_ConfigWindow.cs
@@ -1,1 +1,83 @@
+// VOID
+//
+// VOID_ConfigModule.cs
+//
+// Copyright © 2015, toadicus
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+//    this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation and/or other
+//    materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used
+//    to endorse or promote products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+using KSP;
+using System;
+using ToadicusTools;
+using UnityEngine;
+
+namespace VOID
+{
+	public class VOID_ConfigWindow : VOID_WindowModule
+	{
+		public static VOID_ConfigWindow Instance
+		{
+			get;
+			private set;
+		}
+
+		public override bool inValidScene
+		{
+			get
+			{
+				return true;
+			}
+		}
+
+		public override bool inValidGame
+		{
+			get
+			{
+				return true;
+			}
+		}
+
+		public VOID_ConfigWindow() : base()
+		{
+			VOID_ConfigWindow.Instance = this;
+
+			this.Name = "VOID Configuration";
+		}
+
+		public override void ModuleWindow(int id)
+		{
+			GUILayout.BeginVertical();
+
+			this.core.DrawConfigurables();
+
+			GUILayout.EndVertical();
+			GUI.DragWindow();
+		}
+
+		~VOID_ConfigWindow()
+		{
+			VOID_ConfigWindow.Instance = null;
+		}
+	}
+}
+

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -237,7 +237,7 @@
 			this.logIntervalStr = this.logInterval.value.ToString("#.0##");
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			GUILayout.BeginVertical();
 
@@ -288,7 +288,7 @@
 
 			GUILayout.EndVertical();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 
 		#endregion
@@ -467,10 +467,10 @@
 			this.loggingActive = false;
 			this.firstWrite = true;
 
-			this.waitForLaunch = true;
-
-			this.logInterval = 0.5f;
-			this.csvCollectTimer = 0f;
+			this.waitForLaunch = (VOID_SaveValue<bool>)true;
+
+			this.logInterval = (VOID_SaveValue<float>)0.5f;
+			this.csvCollectTimer = (VOID_SaveValue<float>)0f;
 
 			this.outstandingWrites = 0;
 

--- a/VOID_EditorHUD.cs
+++ b/VOID_EditorHUD.cs
@@ -240,7 +240,7 @@
 
 			this.ehudWindow.WindowPos = hudPos;
 
-			this.snapToLeft = Mathf.Abs(this.ehudWindow.WindowPos.xMin - hudLeft) < 15f;
+			this.snapToLeft.value = Mathf.Abs(this.ehudWindow.WindowPos.xMin - hudLeft) < 15f;
 		}
 	}
 }

--- a/VOID_HUDAdvanced.cs
+++ b/VOID_HUDAdvanced.cs
@@ -95,7 +95,7 @@
 			);
 			this.Windows.Add(this.rightHUD);
 
-			this.positionsLocked = true;
+			this.positionsLocked.value = true;
 
 			Tools.PostDebugMessage (this, "Constructed.");
 		}
@@ -265,7 +265,7 @@
 				}
 			}
 
-			this.positionsLocked = GUITools.Toggle(this.positionsLocked, string.Intern("Lock Advanced HUD Positions"));
+			this.positionsLocked.value = GUITools.Toggle(this.positionsLocked, string.Intern("Lock Advanced HUD Positions"));
 		}
 	}
 }

file:a/VOID_Localization.cs (deleted)
--- a/VOID_Localization.cs
+++ /dev/null
@@ -1,36 +1,1 @@
-// VOID
-//
-// VOID_Localization.cs
-//
-// Copyright © 2014, toadicus
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-//    this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice,
-//    this list of conditions and the following disclaimer in the documentation and/or other
-//    materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be used
-//    to endorse or promote products derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-public static class VOID_Localization
-{
-	public static string void_primary = "Primary";
-	public static string void_altitude_asl = "Altitude (ASL)";
-	public static string void_velocity = "Velocity";
-	public static string void_apoapsis = "Apoapsis";
-	public static string void_periapsis = "Periapsis";
-}

--- a/VOID_Orbital.cs
+++ b/VOID_Orbital.cs
@@ -36,10 +36,10 @@
 	public class VOID_Orbital : VOID_WindowModule
 	{
 		[AVOID_SaveValue("toggleExtended")]
-		protected VOID_SaveValue<bool> toggleExtended = false;
+		protected VOID_SaveValue<bool> toggleExtended;
 
 		[AVOID_SaveValue("precisionValues")]
-		protected long _precisionValues = 230584300921369395;
+		protected long _precisionValues;
 		protected IntCollection precisionValues;
 
 		public VOID_Orbital()
@@ -48,9 +48,13 @@
 
 			this.WindowPos.x = Screen.width - 520f;
 			this.WindowPos.y = 250f;
+
+			this.toggleExtended = (VOID_SaveValue<bool>)false;
+
+			this._precisionValues = 230584300921369395;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			int idx = 0;
 
@@ -108,7 +112,8 @@
             }
 
             GUILayout.EndVertical();
-            GUI.DragWindow();
+            
+			base.ModuleWindow(id);
 		}
 
 		public override void LoadConfig ()
@@ -118,11 +123,11 @@
 			this.precisionValues = new IntCollection (4, this._precisionValues);
 		}
 
-		public override void _SaveToConfig (KSP.IO.PluginConfiguration config)
+		public override void Save (KSP.IO.PluginConfiguration config)
 		{
 			this._precisionValues = this.precisionValues.collection;
 
-			base._SaveToConfig (config);
+			base.Save (config);
 		}
 	}
 }

--- a/VOID_Rendezvous.cs
+++ b/VOID_Rendezvous.cs
@@ -38,10 +38,10 @@
 	public class VOID_Rendezvous : VOID_WindowModule
 	{
 		[AVOID_SaveValue("untoggleRegisterInfo")]
-		protected VOID_SaveValue<bool> untoggleRegisterInfo = false;
+		protected VOID_SaveValue<bool> untoggleRegisterInfo;
 
 		[AVOID_SaveValue("toggleExtendedOrbital")]
-		protected VOID_SaveValue<bool> toggleExtendedOrbital = false;
+		protected VOID_SaveValue<bool> toggleExtendedOrbital;
 
 		protected VOID_VesselRegister RegisterModule;
 
@@ -51,9 +51,12 @@
 
 			this.WindowPos.x = 845;
 			this.WindowPos.y = 85;
+
+			this.untoggleRegisterInfo = (VOID_SaveValue<bool>)false;
+			this.toggleExtendedOrbital = (VOID_SaveValue<bool>)false;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			Vessel rendezvessel = new Vessel();
 			CelestialBody rendezbody = new CelestialBody();
@@ -134,7 +137,8 @@
 			GUILayout.EndHorizontal();
 
 			GUILayout.EndVertical();
-			GUI.DragWindow();
+
+			base.ModuleWindow(id);
 		}
 
 		private void display_rendezvous_info(Vessel v, CelestialBody cb)

--- a/VOID_StageInfo.cs
+++ b/VOID_StageInfo.cs
@@ -40,11 +40,17 @@
 		private VOID_SaveValue<int> bodyIdx;
 		private int lastIdx;
 
+		private bool showAdvanced;
+
+		[AVOID_SaveValue("UseSealLevel")]
+		private VOID_SaveValue<bool> useSeaLevel;
+		private GUIContent seaLevelToggle;
+
 		public VOID_StageInfo() : base()
 		{
 			this.Name = "Stage Information";
 			this.defWidth = 20f;
-			this.bodyIdx = 4;
+			this.bodyIdx = (VOID_SaveValue<int>)4;
 
 			this.stylesApplied = false;
 			this.showBodyList = false;
@@ -87,6 +93,15 @@
 
 			this.stageTimeCol = new Table.Column<string>("Burn Time", 20f);
 			this.stageTable.Add(this.stageTimeCol);
+
+			this.showAdvanced = false;
+
+			this.useSeaLevel = (VOID_SaveValue<bool>)false;
+
+			seaLevelToggle = new GUIContent(
+				"Use Sea Level",
+				"Use 'sea' level atmospheric conditions on bodies with atmospheres."
+			);
 		}
 
 		public override void DrawGUI()
@@ -95,12 +110,17 @@
 
 			if (this.showBodyList)
 			{
-				GUILayout.Window(core.windowID, this.bodyListPos, this.BodyPickerWindow, string.Empty);
-			}
-		}
-
-		public override void ModuleWindow(int _)
-		{
+				GUILayout.Window(core.WindowID, this.bodyListPos, this.BodyPickerWindow, string.Empty);
+			}
+		}
+
+		public override void ModuleWindow(int id)
+		{
+			if (this.selectedBody == null)
+			{
+				this.selectedBody = core.HomeBody;
+			}
+
 			if (
 				!HighLogic.LoadedSceneIsFlight ||
 				(TimeWarp.WarpMode == TimeWarp.Modes.LOW) ||
@@ -129,6 +149,15 @@
 				return;
 			}
 
+			if (HighLogic.LoadedSceneIsEditor && this.selectedBody.atmosphere && this.useSeaLevel)
+			{
+				SimManager.Atmosphere = this.selectedBody.atmosphereMultiplier * 101.325d;
+			}
+			else
+			{
+				SimManager.Atmosphere = 0d;
+			}
+
 			foreach (Stage stage in core.Stages)
 			{
 				if (stage.deltaV == 0 && stage.mass == 0)
@@ -153,13 +182,13 @@
 
 			this.stageTable.Render();
 
-			if (core.sortedBodyList != null)
+			if (core.SortedBodyList != null)
 			{
 				GUILayout.BeginHorizontal();
 
 				if (GUILayout.Button("◄"))
 				{
-					this.bodyIdx--;
+					this.bodyIdx.value--;
 				}
 
 				this.showBodyList = GUILayout.Toggle(
@@ -179,21 +208,43 @@
 
 				if (GUILayout.Button("►"))
 				{
-					this.bodyIdx++;
-				}
-
-				this.bodyIdx %= core.sortedBodyList.Count;
+					this.bodyIdx.value++;
+				}
+
+				this.bodyIdx.value %= core.SortedBodyList.Count;
 
 				if (this.bodyIdx < 0)
 				{
-					this.bodyIdx += core.sortedBodyList.Count;
+					this.bodyIdx.value += core.SortedBodyList.Count;
 				}
 
 				if (this.lastIdx != this.bodyIdx)
 				{
 					this.lastIdx = this.bodyIdx;
-					this.selectedBody = core.sortedBodyList[this.bodyIdx];
-				}
+					this.selectedBody = core.SortedBodyList[this.bodyIdx];
+				}
+
+				if (HighLogic.LoadedSceneIsEditor)
+				{
+					if (
+						GUILayout.Button(
+							this.showAdvanced ? "▲" : "▼",
+							GUILayout.ExpandWidth(false)
+						)
+					)
+					{
+						this.showAdvanced = !this.showAdvanced;
+					}
+				}
+
+				GUILayout.EndHorizontal();
+			}
+
+			if (this.showAdvanced && HighLogic.LoadedSceneIsEditor)
+			{
+				GUILayout.BeginHorizontal();
+
+				this.useSeaLevel.value = GUITools.Toggle(this.useSeaLevel, this.seaLevelToggle, false);
 
 				GUILayout.EndHorizontal();
 			}
@@ -210,7 +261,7 @@
 
 			GUILayout.EndHorizontal();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 
 		public override void DrawConfigurables()
@@ -224,12 +275,12 @@
 
 		private void BodyPickerWindow(int _)
 		{
-			foreach (CelestialBody body in core.sortedBodyList)
+			foreach (CelestialBody body in core.SortedBodyList)
 			{
 				if (GUILayout.Button(body.bodyName, VOID_Styles.labelDefault))
 				{
 					Debug.Log("Picked new body focus: " + body.bodyName);
-					this.bodyIdx = core.sortedBodyList.IndexOf(body);
+					this.bodyIdx.value = core.SortedBodyList.IndexOf(body);
 					this.showBodyList = false;
 				}
 			}

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -36,7 +36,7 @@
 	public class VOID_SurfAtmo : VOID_WindowModule
 	{
 		[AVOID_SaveValue("precisionValues")]
-		protected long _precisionValues = 230584300921369395;
+		protected VOID_SaveValue<long> _precisionValues;
 		protected IntCollection precisionValues;
 
 		public VOID_SurfAtmo()
@@ -45,9 +45,11 @@
 
 			this.WindowPos.x = Screen.width - 260f;
 			this.WindowPos.y = 85;
+
+			this._precisionValues = (VOID_SaveValue<long>)230584300921369395;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			int idx = 0;
 
@@ -91,7 +93,8 @@
 			VOID_Data.currBiome.DoGUIHorizontal ();
 
 			GUILayout.EndVertical();
-			GUI.DragWindow();
+
+			base.ModuleWindow(id);
 		}
 
 		public override void LoadConfig ()
@@ -101,11 +104,11 @@
 			this.precisionValues = new IntCollection (4, this._precisionValues);
 		}
 
-		public override void _SaveToConfig (KSP.IO.PluginConfiguration config)
+		public override void Save (KSP.IO.PluginConfiguration config)
 		{
-			this._precisionValues = this.precisionValues.collection;
+			this._precisionValues.value = this.precisionValues.collection;
 
-			base._SaveToConfig (config);
+			base.Save (config);
 		}
 	}
 }

--- a/VOID_TWR.cs
+++ b/VOID_TWR.cs
@@ -20,7 +20,7 @@
 			this.Name = "IP Thrust-to-Weight Ratios";
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			if (
 				!HighLogic.LoadedSceneIsFlight ||
@@ -33,7 +33,7 @@
 
 			GUILayout.BeginVertical();
 
-			if (core.sortedBodyList == null)
+			if (core.SortedBodyList == null)
 			{
 				GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 
@@ -43,7 +43,7 @@
 			}
 			else
 			{
-				foreach (CelestialBody body in core.sortedBodyList)
+				foreach (CelestialBody body in core.SortedBodyList)
 				{
 					GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 
@@ -60,7 +60,7 @@
 
 			GUILayout.EndVertical();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 	}
 }

--- a/VOID_Transfer.cs
+++ b/VOID_Transfer.cs
@@ -48,7 +48,7 @@
 			this.defWidth = 315;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			GUILayout.BeginVertical();
 
@@ -140,7 +140,8 @@
 				}
 			}
 			GUILayout.EndVertical();
-			GUI.DragWindow();
+
+			base.ModuleWindow(id);
 		}
 
 		private void tad_targeting(CelestialBody body)

--- a/VOID_VesselInfo.cs
+++ b/VOID_VesselInfo.cs
@@ -46,7 +46,7 @@
 			this.WindowPos.y = 450;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			if ((TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate))
 			{
@@ -86,7 +86,7 @@
 
 			GUILayout.EndVertical();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 	}
 }

--- a/VOID_VesselRegister.cs
+++ b/VOID_VesselRegister.cs
@@ -37,16 +37,16 @@
 	public class VOID_VesselRegister : VOID_WindowModule
 	{
 		[AVOID_SaveValue("selectedBodyIdx")]
-		protected VOID_SaveValue<int> selectedBodyIdx = 0;
+		protected VOID_SaveValue<int> selectedBodyIdx;
 		protected CelestialBody seletedBody;
 
 		[AVOID_SaveValue("selectedVesselTypeIdx")]
-		protected VOID_SaveValue<int> selectedVesselTypeIdx = 0;
+		protected VOID_SaveValue<int> selectedVesselTypeIdx;
 		protected VesselType selectedVesselType;
 
-		protected string vesselSituation = "Orbiting";
+		protected string vesselSituation;
 
-		protected Vector2 selectorScrollPos = new Vector2();
+		protected Vector2 selectorScrollPos;
 
 		protected Vessel _selectedVessel;
 
@@ -65,11 +65,18 @@
 			this.WindowPos.x = 845;
 			this.WindowPos.y = 275;
 			this.defHeight = 375;
+
+			this.selectedBodyIdx = (VOID_SaveValue<int>)0;
+			this.selectedVesselTypeIdx = (VOID_SaveValue<int>)0;
+
+			this.vesselSituation = "Orbiting";
+
+			this.selectorScrollPos = new Vector2();
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
-			if (!this.core.allVesselTypes.Any())
+			if (!this.core.AllVesselTypes.Any())
 			{
 				return;
 			}
@@ -79,34 +86,46 @@
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("<"))
 			{
-				selectedBodyIdx--;
-				if (selectedBodyIdx < 0) selectedBodyIdx = this.core.allBodies.Count - 1;
+				selectedBodyIdx.value--;
+				if (selectedBodyIdx < 0)
+				{
+					selectedBodyIdx.value = this.core.AllBodies.Count - 1;
+				}
 			}
-			GUILayout.Label(this.core.allBodies[selectedBodyIdx].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
+			GUILayout.Label(this.core.AllBodies[selectedBodyIdx].bodyName, VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
 			if (GUILayout.Button(">"))
 			{
-				selectedBodyIdx++;
-				if (selectedBodyIdx > this.core.allBodies.Count - 1) selectedBodyIdx = 0;
+				selectedBodyIdx.value++;
+				if (selectedBodyIdx > this.core.AllBodies.Count - 1)
+				{
+					selectedBodyIdx.value = 0;
+				}
 			}
 			GUILayout.EndHorizontal();
 
-			seletedBody = this.core.allBodies[selectedBodyIdx];
+			seletedBody = this.core.AllBodies[selectedBodyIdx];
 
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("<"))
 			{
-				selectedVesselTypeIdx--;
-				if (selectedVesselTypeIdx < 0) selectedVesselTypeIdx = this.core.allVesselTypes.Count - 1;
+				selectedVesselTypeIdx.value--;
+				if (selectedVesselTypeIdx < 0)
+				{
+					selectedVesselTypeIdx.value = this.core.AllVesselTypes.Length - 1;
+				}
 			}
-			GUILayout.Label(this.core.allVesselTypes[selectedVesselTypeIdx].ToString(), VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
+			GUILayout.Label(this.core.AllVesselTypes[selectedVesselTypeIdx].ToString(), VOID_Styles.labelCenterBold, GUILayout.ExpandWidth(true));
 			if (GUILayout.Button(">"))
 			{
-				selectedVesselTypeIdx++;
-				if (selectedVesselTypeIdx > this.core.allVesselTypes.Count - 1) selectedVesselTypeIdx = 0;
+				selectedVesselTypeIdx.value++;
+				if (selectedVesselTypeIdx > this.core.AllVesselTypes.Length - 1)
+				{
+					selectedVesselTypeIdx.value = 0;
+				}
 			}
 			GUILayout.EndHorizontal();
 
-			selectedVesselType = this.core.allVesselTypes[selectedVesselTypeIdx];
+			selectedVesselType = this.core.AllVesselTypes[selectedVesselTypeIdx];
 
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
 			if (GUILayout.Button("Landed", GUILayout.ExpandWidth(true))) vesselSituation = "Landed";
@@ -157,7 +176,7 @@
 
 			GUILayout.EndVertical();
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 	}
 }