Version 0.18.4 0.18.4
Version 0.18.4

--- a/API/IVOID_Module.cs
+++ b/API/IVOID_Module.cs
@@ -44,7 +44,8 @@
 
 		void DrawConfigurables();
 
-		void LoadConfig();
+		// void LoadConfig();
+		void LoadConfig(KSP.IO.PluginConfiguration config);
 
 		void Save(KSP.IO.PluginConfiguration config, string sceneKey);
 	}

--- a/API/VOIDCore.cs
+++ b/API/VOIDCore.cs
@@ -42,6 +42,9 @@
 		public abstract int ConfigVersion { get; }
 		public virtual bool configNeedsUpdate { get; set; }
 
+		public virtual string SaveGamePath { get; protected set; }
+		public virtual string VOIDSettingsPath { get; protected set; }
+
 		public abstract string SceneKey { get; }
 
 		public abstract int WindowID { get; }
@@ -72,11 +75,6 @@
 
 		public virtual void OnGUI() {}
 
-		public override void LoadConfig()
-		{
-			base.LoadConfig();
-		}
-
 		public abstract void SaveConfig();
 
 		public override void Save(KSP.IO.PluginConfiguration config, string sceneKey)

--- a/API/VOIDMaster.cs
+++ b/API/VOIDMaster.cs
@@ -80,6 +80,8 @@
 				this.LogDebug("Factory reset is true; deleting config and disposing!");
 
 				KSP.IO.File.Delete<T>("config.xml");
+				System.IO.File.Delete(this.Core.VOIDSettingsPath);
+
 				this.Core.Dispose();
 				this.Core = null;
 			}

--- a/API/VOID_HUDModule.cs
+++ b/API/VOID_HUDModule.cs
@@ -142,11 +142,10 @@
 			this.positionsLocked.value = Layout.Toggle(this.positionsLocked, "Lock HUD Positions");
 		}
 
-		public override void LoadConfig()
-		{
-			base.LoadConfig();
-
-			var config = KSP.IO.PluginConfiguration.CreateForType<VOID_HUDModule>();
+		public override void LoadConfig(KSP.IO.PluginConfiguration config)
+		{
+			base.LoadConfig(config);
+
 			config.load();
 
 			HUDWindow window;

--- a/API/VOID_Module.cs
+++ b/API/VOID_Module.cs
@@ -249,9 +249,8 @@
 
 		public virtual void DrawConfigurables() {}
 
-		public virtual void LoadConfig()
-		{
-			var config = KSP.IO.PluginConfiguration.CreateForType<VOID_Module> ();
+		public virtual void LoadConfig(KSP.IO.PluginConfiguration config)
+		{
 			config.load ();
 
 			if (this is VOIDCore)
@@ -374,6 +373,22 @@
 
 		public virtual void Save(KSP.IO.PluginConfiguration config, string sceneKey)
 		{
+			if (config == null)
+			{
+				ToadicusTools.Logging.PostErrorMessage(
+					"{0}: config argument was null, bailing out.",
+					this.GetType().Name
+				);
+			}
+
+			if (sceneKey == null)
+			{
+				ToadicusTools.Logging.PostErrorMessage(
+					"{0}: sceneKey argument was null, bailing out.",
+					this.GetType().Name
+				);
+			}
+
 			MemberInfo[] members = this.GetType().GetMembers(
 				BindingFlags.NonPublic |
 				BindingFlags.Public |

--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -39,7 +39,7 @@
 // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("0.18.3.*")]
+[assembly: AssemblyVersion("0.18.4.*")]
 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.
 //[assembly: AssemblyDelaySign(false)]

--- a/Tools/VOID_Tools.cs
+++ b/Tools/VOID_Tools.cs
@@ -335,21 +335,16 @@
 					{
 						func(id);
 					}
-					#if DEBUG
+					#if !DEBUG
 					catch (ArgumentException)
-					#else
-					catch (ArgumentException)
-					#endif
 					{
 						Debug.LogWarning(
-							string.Format("[{0}]: ArgumentException caught during window call.  This is not a bug.",
+							string.Format("[{0}]: ArgumentException caught during window call." +
+								"  This may not be a bug when occuring during scene changes.",
 								func.Target.GetType().Name
 							));
-
-						/*#if DEBUG
-						Debug.LogException(ex);
-						#endif*/
 					}
+					#endif
 					catch (Exception ex)
 					{
 						Debug.LogError(

--- a/VOIDCore_Generic.cs
+++ b/VOIDCore_Generic.cs
@@ -462,7 +462,7 @@
 
 			this.saveTimer += Time.deltaTime;
 
-			if (this.saveTimer > 2f)
+			if (this.modulesLoaded && this.saveTimer > 2f)
 			{
 				if (this.configDirty)
 				{
@@ -841,6 +841,8 @@
 					}
 				}
 
+				this.LoadConfig();
+
 				this.modulesLoaded = true;
 
 				sb.AppendFormat("Loaded {0} modules.\n", this.Modules.Count);
@@ -888,7 +890,6 @@
 
 			if (module.InValidGame && module.InValidScene)
 			{
-				module.LoadConfig();
 				this.modules.Add(module);
 
 				ToadicusTools.Logging.PostDebugMessage(string.Format(
@@ -1103,16 +1104,34 @@
 			}
 		}
 
-		public override void LoadConfig()
-		{
-			base.LoadConfig();
+		public void LoadConfig()
+		{
+
+			if (!System.IO.File.Exists(this.VOIDSettingsPath) && KSP.IO.File.Exists<VOID_Module>("config.xml"))
+			{
+				ToadicusTools.Logging.PostLogMessage(
+					"VOID: No per-save config file but old file detected; copying from old file."
+				);
+
+				System.IO.File.Copy(
+					KSP.IO.IOUtils.GetFilePathFor(typeof(VOID_Module), "config.xml"),
+					this.VOIDSettingsPath
+				);
+			}
+
+			this.LoadConfig(new ToadicusTools.PluginConfiguration(this.VOIDSettingsPath));
+		}
+
+		public override void LoadConfig(KSP.IO.PluginConfiguration config)
+		{
+			base.LoadConfig(config);
 
 			IVOID_Module module;
 			for (int idx = 0; idx < this.modules.Count; idx++)
 			{
 				module = this.modules[idx];
 
-				module.LoadConfig();
+				module.LoadConfig(config);
 			}
 
 			this.TimeScale |= GameSettings.KERBIN_TIME ? VOID_TimeScale.KERBIN_TIME : 0u;
@@ -1123,9 +1142,10 @@
 			if (this.configNeedsUpdate && this is VOIDCore_Flight)
 			{
 				KSP.IO.File.Delete<T>("config.xml");
-			}
-
-			var config = KSP.IO.PluginConfiguration.CreateForType<T>();
+				System.IO.File.Delete(this.VOIDSettingsPath);
+			}
+
+			KSP.IO.PluginConfiguration config = new ToadicusTools.PluginConfiguration(this.VOIDSettingsPath);
 
 			config.load();
 
@@ -1171,9 +1191,8 @@
 
 			this.useToolbarManager = (VOID_SaveValue<bool>)ToolbarManager.ToolbarAvailable;
 
-			this.LoadConfig();
-
-			this.configVersion = (VOID_SaveValue<int>)VOIDCore.CONFIG_VERSION;
+			this.SaveGamePath = string.Format("{0}saves/{1}", ToadicusTools.IOTools.KSPRootPath, HighLogic.SaveFolder);
+			this.VOIDSettingsPath = string.Format("{0}/VOIDConfig.xml", this.SaveGamePath);
 
 			this.FactoryReset = false;
 		}

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -107,14 +107,11 @@
 			{
 				if (this._fileName == null || this._fileName == string.Empty)
 				{
-					this._fileName = KSP.IO.IOUtils.GetFilePathFor(
-						typeof(VOIDCore),
-						string.Format(
-							"{0}_{1}",
-							this.Vessel.vesselName,
-							"data.csv"
-						),
-						null
+					this._fileName = string.Format(
+						"{0}/{1}_{2}",
+						this.core.SaveGamePath,
+						this.Vessel.vesselName,
+						"data.csv"
 					);
 				}
 
@@ -237,9 +234,9 @@
 
 		#region VOID_Module Overrides
 
-		public override void LoadConfig()
-		{
-			base.LoadConfig();
+		public override void LoadConfig(KSP.IO.PluginConfiguration config)
+		{
+			base.LoadConfig(config);
 
 			this.logIntervalStr = this.logInterval.value.ToString("#.0##");
 		}

--- a/VOID_Orbital.cs
+++ b/VOID_Orbital.cs
@@ -118,9 +118,9 @@
 			base.ModuleWindow(id);
 		}
 
-		public override void LoadConfig ()
+		public override void LoadConfig(KSP.IO.PluginConfiguration config)
 		{
-			base.LoadConfig ();
+			base.LoadConfig(config);
 
 			this.precisionValues = new ToadicusTools.IntCollection (4, this._precisionValues);
 		}

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -98,9 +98,9 @@
 			base.ModuleWindow(id);
 		}
 
-		public override void LoadConfig()
+		public override void LoadConfig(KSP.IO.PluginConfiguration config)
 		{
-			base.LoadConfig();
+			base.LoadConfig(config);
 
 			this.precisionValues = new IntCollection(4, this._precisionValues);
 		}