Added sane window start positions and states. 0.9.9
Added sane window start positions and states.
Added factory reset.

--- a/VOIDFlightMaster.cs
+++ b/VOIDFlightMaster.cs
@@ -56,7 +56,7 @@
 		{
 			if (this.Core == null)
 			{
-				return;
+				this.Awake();
 			}
 
 			this.Core.Update ();
@@ -65,6 +65,13 @@
 			{
 				SimManager.Instance.Gravity = VOID_Core.Instance.vessel.mainBody.gravParameter / Math.Pow(VOID_Core.Instance.vessel.mainBody.Radius, 2);
 				SimManager.Instance.TryStartSimulation();
+			}
+
+			if (this.Core.factoryReset)
+			{
+				KSP.IO.File.Delete<VOID_Core>("config.xml");
+				this.Core = null;
+				VOID_Core.Reset();
 			}
 		}
 

--- a/VOID_CBInfoBrowser.cs
+++ b/VOID_CBInfoBrowser.cs
@@ -45,6 +45,9 @@
 		public VOID_CBInfoBrowser()
 		{
 			this._Name = "Celestial Body Information Browser";
+
+			this.WindowPos.x = 10;
+			this.WindowPos.y = 85;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -55,6 +55,13 @@
 			}
 		}
 
+		public static void Reset()
+		{
+			_instance.StopGUI();
+			_instance = null;
+			_initialized = false;
+		}
+
 		public static double Constant_G = 6.674e-11;
 
 		/*
@@ -63,6 +70,8 @@
 		protected string VoidName = "VOID";
 		protected string VoidVersion = "0.9.9";
 
+		protected bool _factoryReset = false;
+
 		[AVOID_SaveValue("configValue")]
 		protected VOID_SaveValue<int> configVersion = 1;
 
@@ -70,13 +79,13 @@
 		protected bool _modulesLoaded = false;
 
 		[AVOID_SaveValue("mainWindowPos")]
-		protected VOID_SaveValue<Rect> mainWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f);
+		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(Screen.width / 2, Screen.height  /2, 10f, 10f);
+		protected VOID_SaveValue<Rect> configWindowPos = new Rect(825, 625, 10f, 10f);
 
 		[AVOID_SaveValue("configWindowMinimized")]
 		protected VOID_SaveValue<bool> configWindowMinimized = true;
@@ -121,13 +130,33 @@
 		public float saveTimer = 0;
 
 		protected string defaultSkin = "KSP window 2";
-		protected VOID_SaveValue<string> _skin;
+		protected VOID_SaveValue<int> _skinIdx = int.MinValue;
+		protected List<GUISkin> skin_list;
+		protected string[] forbiddenSkins =
+		{
+			"PlaqueDialogSkin",
+			"FlagBrowserSkin",
+			"SSUITextAreaDefault",
+			"ExperimentsDialogSkin",
+			"ExpRecoveryDialogSkin",
+			"KSP window 5",
+			"KSP window 6"
+		};
+		protected bool skinsLoaded = false;
 
 		public bool configDirty;
 
 		/*
 		 * Properties
 		 * */
+		public bool factoryReset
+		{
+			get
+			{
+				return this._factoryReset;
+			}
+		}
+
 		public List<IVOID_Module> Modules
 		{
 			get
@@ -140,11 +169,11 @@
 		{
 			get
 			{
-				if (this._skin == null)
-				{
-					this._skin = this.defaultSkin;
-				}
-				return AssetBase.GetGUISkin(this._skin);
+				if (this.skin_list == null || this._skinIdx < 0 || this._skinIdx > this.skin_list.Count)
+				{
+					return AssetBase.GetGUISkin(this.defaultSkin);
+				}
+				return this.skin_list[this._skinIdx];
 			}
 		}
 
@@ -190,6 +219,8 @@
 		protected VOID_Core()
 		{
 			this._Name = "VOID Core";
+
+			this._Active = true;
 
 			this.VOIDIconOn = GameDatabase.Instance.GetTexture (this.VOIDIconOnPath, false);
 			this.VOIDIconOff = GameDatabase.Instance.GetTexture (this.VOIDIconOffPath, false);
@@ -281,7 +312,11 @@
 				{
 					module.StartGUI ();
 				}
-				if (module.guiRunning && !module.toggleActive || !this.togglePower || !HighLogic.LoadedSceneIsFlight)
+				if (module.guiRunning && !module.toggleActive ||
+				    !this.togglePower ||
+				    !HighLogic.LoadedSceneIsFlight
+				    || this.factoryReset
+				    )
 				{
 					module.StopGUI();
 				}
@@ -323,6 +358,37 @@
 			{
 				module.FixedUpdate();
 			}
+		}
+
+		protected void LoadSkins()
+		{
+			this.skin_list = AssetBase.FindObjectsOfTypeIncludingAssets(typeof(GUISkin))
+				.Where(s => !this.forbiddenSkins.Contains(s.name))
+					.Select(s => s as GUISkin)
+					.ToList();
+
+			Tools.PostDebugMessage(string.Format(
+				"{0}: loaded {1} GUISkins.",
+				this.GetType().Name,
+				this.skin_list.Count
+			));
+
+			if (this._skinIdx == int.MinValue)
+			{
+				this._skinIdx = this.skin_list.IndexOf(this.Skin);
+				Tools.PostDebugMessage(string.Format(
+					"{0}: resetting _skinIdx to default.",
+					this.GetType().Name
+					));
+			}
+
+			Tools.PostDebugMessage(string.Format(
+				"{0}: _skinIdx = {1}.",
+				this.GetType().Name,
+				this._skinIdx.ToString()
+				));
+
+			this.skinsLoaded = true;
 		}
 
 		protected void LoadGUIStyles()
@@ -401,10 +467,43 @@
 		{
 			this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources");
 
+			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+
+			GUILayout.Label("Skin:", GUILayout.ExpandWidth(false));
+
+			GUIContent _content = new GUIContent();
+
+			_content.text = "◄";
+			_content.tooltip = "Select previous skin";
+			if (GUILayout.Button(_content, GUILayout.ExpandWidth(true)))
+			{
+				this._skinIdx--;
+				if (this._skinIdx < 0) this._skinIdx = skin_list.Count - 1;
+				Tools.PostDebugMessage("[VOID] new this._skin = " + this._skinIdx + " :: skin_list.Count = " + skin_list.Count);
+			}
+
+			string skin_name = skin_list[this._skinIdx].name;
+			_content.text = skin_name;
+			_content.tooltip = "Current skin";
+			GUILayout.Label(_content, this.LabelStyles["center"], GUILayout.ExpandWidth(true));
+
+			_content.text = "►";
+			_content.tooltip = "Select next skin";
+			if (GUILayout.Button(_content, GUILayout.ExpandWidth(true)))
+			{
+				this._skinIdx++;
+				if (this._skinIdx >= skin_list.Count) this._skinIdx = 0;
+				Tools.PostDebugMessage("[VOID] new this._skin = " + this._skinIdx + " :: skin_list.Count = " + skin_list.Count);
+			}
+
+			GUILayout.EndHorizontal();
+
 			foreach (IVOID_Module mod in this.Modules)
 			{
 				mod.DrawConfigurables ();
 			}
+
+			this._factoryReset = GUILayout.Toggle (this._factoryReset, "Factory Reset");
 		}
 
 		public override void DrawGUI()
@@ -415,6 +514,11 @@
 			}
 
 			this._windowID = this.windowBaseID;
+
+			if (!this.skinsLoaded)
+			{
+				this.LoadSkins();
+			}
 
 			GUI.skin = this.Skin;
 

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -57,16 +57,22 @@
 		public VOID_DataLogger()
 		{
 			this._Name = "CSV Data Logger";
+
+			this.WindowPos.x = Screen.width - 520;
+			this.WindowPos.y = 85;
 		}
 
 		public override void ModuleWindow(int _)
 		{
 			GUIStyle txt_white = new GUIStyle(GUI.skin.label);
 			txt_white.normal.textColor = txt_white.focused.textColor = Color.white;
+			txt_white.alignment = TextAnchor.UpperRight;
 			GUIStyle txt_green = new GUIStyle(GUI.skin.label);
 			txt_green.normal.textColor = txt_green.focused.textColor = Color.green;
+			txt_green.alignment = TextAnchor.UpperRight;
 			GUIStyle txt_yellow = new GUIStyle(GUI.skin.label);
 			txt_yellow.normal.textColor = txt_yellow.focused.textColor = Color.yellow;
+			txt_yellow.alignment = TextAnchor.UpperRight;
 
 			GUILayout.BeginVertical();
 
@@ -129,6 +135,24 @@
 				//increment timers
 				csvWriteTimer += Time.deltaTime;
 				csvCollectTimer += Time.deltaTime;
+
+				if (csvCollectTimer >= csv_log_interval && vessel.situation != Vessel.Situations.PRELAUNCH)
+				{
+					//data logging is on, vessel is not prelaunch, and interval has passed
+					//write a line to the list
+					line_to_csvList();  //write to the csv
+				}
+
+				if (csvList.Count != 0 && csvWriteTimer >= 15f)
+				{
+					// csvList is not empty and interval between writings to file has elapsed
+					//write it
+					string[] csvData;
+					csvData = (string[])csvList.ToArray();
+					Innsewerants_writeData(csvData);
+					csvList.Clear();
+					csvWriteTimer = 0f;
+				}
 			}
 			else
 			{
@@ -139,22 +163,9 @@
 				if (csvList.Count > 0) csvList.Clear();
 			}
 
-			if (csv_logging && csvCollectTimer >= csv_log_interval && vessel.situation != Vessel.Situations.PRELAUNCH)
-			{
-				//data logging is on, vessel is not prelaunch, and interval has passed
-				//write a line to the list
-				line_to_csvList();  //write to the csv
-			}
-
-			if (csvList.Count != 0 && csvWriteTimer >= 15f && csv_logging)
-			{
-				// csvList is not empty and interval between writings to file has elapsed
-				//write it
-				string[] csvData;
-				csvData = (string[])csvList.ToArray();
-				Innsewerants_writeData(csvData);
-				csvList.Clear();
-				csvWriteTimer = 0f;
+			if (stopwatch1_running)
+			{
+				stopwatch1 += Time.deltaTime;
 			}
 		}
 

--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -66,6 +66,9 @@
 		public VOID_HUD() : base()
 		{
 			this._Name = "Heads-Up Display";
+
+			this._Active = true;
+
 			this.textColors.Add(Color.green);
 			this.textColors.Add(Color.black);
 			this.textColors.Add(Color.white);

--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -32,7 +32,7 @@
 		 * Fields
 		 * */
 		[AVOID_SaveValue("Active")]
-		protected VOID_SaveValue<bool> _Active = true;
+		protected VOID_SaveValue<bool> _Active = false;
 		protected bool _Running = false;
 
 		protected string _Name;
@@ -185,7 +185,9 @@
 	public abstract class VOID_WindowModule : VOID_Module
 	{
 		[AVOID_SaveValue("WindowPos")]
-		protected Rect WindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f);
+		protected Rect WindowPos = new Rect(Screen.width / 2, Screen.height / 2, 250f, 50f);
+		protected float defWidth = 250f;
+		protected float defHeight = 50f;
 
 		public abstract void ModuleWindow(int _);
 
@@ -197,8 +199,10 @@
 				VOID_Core.Instance.windowID,
 				_Pos,
 				this.ModuleWindow,
-				this.Name, GUILayout.Width(250),
-				GUILayout.Height(50));
+				this.Name,
+				GUILayout.Width(this.defWidth),
+				GUILayout.Height(this.defHeight)
+			);
 
 			if (_Pos != this.WindowPos)
 			{

--- a/VOID_Orbital.cs
+++ b/VOID_Orbital.cs
@@ -32,6 +32,9 @@
 		public VOID_Orbital()
 		{
 			this._Name = "Orbital Information";
+
+			this.WindowPos.x = Screen.width - 520f;
+			this.WindowPos.y = 250f;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_Rendezvous.cs
+++ b/VOID_Rendezvous.cs
@@ -39,6 +39,9 @@
 		public VOID_Rendezvous()
 		{
 			this._Name = "Rendezvous Information";
+
+			this.WindowPos.x = 845;
+			this.WindowPos.y = 85;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_SaveValue.cs
+++ b/VOID_SaveValue.cs
@@ -83,6 +83,11 @@
 			}
 			return r;
 		}
+
+		public new string ToString()
+		{
+			return this.value.ToString();
+		}
 	}
 
 	public interface IVOID_SaveValue

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -29,6 +29,9 @@
 		public VOID_SurfAtmo()
 		{
 			this._Name = "Surface & Atmospheric Information";
+
+			this.WindowPos.x = Screen.width - 260f;
+			this.WindowPos.y = 85;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_Transfer.cs
+++ b/VOID_Transfer.cs
@@ -35,6 +35,10 @@
 		public VOID_Transfer()
 		{
 			this._Name = "Transfer Angle Information";
+
+			this.WindowPos.x = 475;
+			this.WindowPos.y = 85;
+			this.defWidth = 315;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_VesselInfo.cs
+++ b/VOID_VesselInfo.cs
@@ -32,6 +32,9 @@
 		public VOID_VesselInfo()
 		{
 			this._Name = "Vessel Information";
+
+			this.WindowPos.x = Screen.width - 260;
+			this.WindowPos.y = 450;
 		}
 
 		public override void ModuleWindow(int _)

--- a/VOID_VesselRegister.cs
+++ b/VOID_VesselRegister.cs
@@ -52,6 +52,10 @@
 		public VOID_VesselRegister()
 		{
 			this._Name = "Vessel Register";
+
+			this.WindowPos.x = 845;
+			this.WindowPos.y = 275;
+			this.defHeight = 375;
 		}
 
 		public override void ModuleWindow(int _)