IVOID_Module: Apparently I missed the changes to Save here in the commit somehow.
IVOID_Module: Apparently I missed the changes to Save here in the commit somehow.

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

--- a/API/VOIDCore.cs
+++ b/API/VOIDCore.cs
@@ -43,6 +43,8 @@
 		public abstract int ConfigVersion { get; }
 		public virtual bool configNeedsUpdate { get; set; }
 
+		public abstract string SceneKey { get; }
+
 		public abstract int WindowID { get; }
 		public abstract bool configDirty { get; set; }
 		public abstract bool powerAvailable	{ get; protected set; }
@@ -79,9 +81,9 @@
 
 		public abstract void SaveConfig();
 
-		public override void Save(KSP.IO.PluginConfiguration config)
+		public override void Save(KSP.IO.PluginConfiguration config, string sceneKey)
 		{
-			base.Save(config);
+			base.Save(config, sceneKey);
 		}
 	}
 

--- a/API/VOID_HUDModule.cs
+++ b/API/VOID_HUDModule.cs
@@ -161,9 +161,9 @@
 			}
 		}
 
-		public override void Save(KSP.IO.PluginConfiguration config)
-		{
-			base.Save(config);
+		public override void Save(KSP.IO.PluginConfiguration config, string sceneKey)
+		{
+			base.Save(config, sceneKey);
 
 			HUDWindow window;
 			for (int idx = 0; idx < this.Windows.Count; idx++)

--- a/API/VOID_Module.cs
+++ b/API/VOID_Module.cs
@@ -369,7 +369,7 @@
 			}
 		}
 
-		public virtual void Save(KSP.IO.PluginConfiguration config)
+		public virtual void Save(KSP.IO.PluginConfiguration config, string sceneKey)
 		{
 			MemberInfo[] members = this.GetType().GetMembers(
 				BindingFlags.NonPublic |
@@ -407,7 +407,7 @@
 					fieldName = string.Format(
 						"{0}_{1}_{2}",
 						this.GetType().Name,
-						Enum.GetName(typeof(GameScenes), HighLogic.LoadedScene),
+						sceneKey,
 						attr.Name
 					);
 				}

--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -39,10 +39,9 @@
 // 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.2.*")]
+[assembly: AssemblyVersion("0.18.3.*")]
 // 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)]
 //[assembly: AssemblyKeyFile("")]
 
-

--- a/VOIDCore_Editor.cs
+++ b/VOIDCore_Editor.cs
@@ -38,6 +38,15 @@
 	[VOID_Scenes(GameScenes.EDITOR)]
 	public class VOIDCore_Editor : VOIDCore_Generic<VOIDCore_Editor>
 	{
+		public override string SceneKey
+		{
+			get
+			{
+				return "EDITOR";
+			}
+		}
+
+
 		public override void FixedUpdate() {}
 	}
 }

--- a/VOIDCore_Flight.cs
+++ b/VOIDCore_Flight.cs
@@ -36,6 +36,15 @@
 	[VOID_Scenes(GameScenes.FLIGHT)]
 	public class VOIDCore_Flight : VOIDCore_Generic<VOIDCore_Flight>
 	{
+		public override string SceneKey
+		{
+			get
+			{
+				return "FLIGHT";
+			}
+		}
+
+
 		public override void DrawConfigurables()
 		{
 			if (HighLogic.LoadedSceneIsFlight)

--- a/VOIDCore_Generic.cs
+++ b/VOIDCore_Generic.cs
@@ -1130,14 +1130,14 @@
 
 			config.load();
 
-			this.Save(config);
+			this.Save(config, this.SceneKey);
 
 			IVOID_Module module;
 			for (int idx = 0; idx < this.modules.Count; idx++)
 			{
 				module = this.modules[idx];
 
-				module.Save(config);
+				module.Save(config, this.SceneKey);
 			}
 
 			config.save();

--- a/VOIDCore_SpaceCentre.cs
+++ b/VOIDCore_SpaceCentre.cs
@@ -32,6 +32,14 @@
 	[VOID_Scenes(GameScenes.SPACECENTER)]
 	public class VOIDCore_SpaceCentre : VOIDCore_Generic<VOIDCore_SpaceCentre>
 	{
+		public override string SceneKey
+		{
+			get
+			{
+				return "SPACECENTER";
+			}
+		}
+
 		public override void FixedUpdate() {}
 	}
 }

--- a/VOID_Data.cs
+++ b/VOID_Data.cs
@@ -723,16 +723,57 @@
 				"m"
 			);
 
-		public static readonly VOID_StrValue surfLatitude =
+		public static readonly VOID_StrValue surfLatitudeString =
 			new VOID_StrValue(
 				"Latitude",
 				new Func<string>(() => VOID_Tools.GetLatitudeString(Core.Vessel))
 			);
 
-		public static readonly VOID_StrValue surfLongitude =
+		public static readonly VOID_DoubleValue surfLatitude =
+			new VOID_DoubleValue(
+				"Latitude",
+				delegate()
+				{
+					if (CoreInitialized && Core.Vessel != null)
+					{
+						return Core.Vessel.latitude;
+					}
+					return double.NaN;
+				},
+				"°"
+			);
+
+		public static readonly VOID_StrValue surfLongitudeString =
 			new VOID_StrValue(
 				"Longitude",
 				new Func<string>(() => VOID_Tools.GetLongitudeString(Core.Vessel))
+			);
+
+		public static readonly VOID_DoubleValue surfLongitude =
+			new VOID_DoubleValue(
+				"Longitude",
+				delegate()
+				{
+					if (CoreInitialized && Core.Vessel != null)
+					{
+						double longitude = Core.Vessel.longitude;
+
+						longitude = VOID_Tools.FixDegreeDomain(longitude);
+
+						if (longitude < -180d)
+						{
+							longitude += 360d;
+						}
+						if (longitude >= 180)
+						{
+							longitude -= 360d;
+						}
+
+						return longitude;
+					}
+					return double.NaN;
+				},
+				"°"
 			);
 
 		public static readonly VOID_DoubleValue trueAltitude =

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -305,7 +305,7 @@
 			//called if logging is on and interval has passed
 			//writes one line to the csvList
 
-			StringBuilder line = new StringBuilder();
+			StringBuilder line = Tools.GetStringBuilder();
 
 			if (firstWrite)
 			{
@@ -408,6 +408,8 @@
 			csvBytes.AddRange(this.utf8Encoding.GetBytes(line.ToString()));
 
 			this.csvCollectTimer = 0f;
+
+			Tools.PutStringBuilder(line);
 		}
 
 		#endregion

--- a/VOID_EditorHUD.cs
+++ b/VOID_EditorHUD.cs
@@ -118,7 +118,7 @@
 
 		public void ehudWindowFunc(int id)
 		{
-			StringBuilder hudString = new StringBuilder();
+			StringBuilder hudString = Tools.GetStringBuilder();
 
 			if (this.core.LastStage == null)
 			{
@@ -192,6 +192,8 @@
 			}
 
 			GUI.BringWindowToBack(id);
+
+			Tools.PutStringBuilder(hudString);
 		}
 
 		public override void DrawGUI()

--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -70,7 +70,7 @@
 		{
 			StringBuilder leftHUD;
 
-			leftHUD = new StringBuilder();
+			leftHUD = Tools.GetStringBuilder();
 
 			VOID_Styles.labelHud.alignment = TextAnchor.UpperRight;
 
@@ -116,13 +116,15 @@
 			}
 
 			GUI.BringWindowToBack(id);
+
+			Tools.PutStringBuilder(leftHUD);
 		}
 
 		protected void rightHUDWindow(int id)
 		{
 			StringBuilder rightHUD;
 
-			rightHUD = new StringBuilder();
+			rightHUD = Tools.GetStringBuilder();
 
 			VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft;
 
@@ -141,8 +143,8 @@
 					VOID_Data.horzVelocity.ToSIString()
 				);
 				rightHUD.AppendFormat("\nLat: {0} Lon: {1}",
-					VOID_Data.surfLatitude.ValueUnitString(),
-					VOID_Data.surfLongitude.ValueUnitString()
+					VOID_Data.surfLatitudeString.ValueUnitString(),
+					VOID_Data.surfLongitudeString.ValueUnitString()
 				);
 				rightHUD.AppendFormat("\nHdg: {0} Pit: {1}",
 					VOID_Data.vesselHeading.ValueUnitString(),
@@ -182,6 +184,8 @@
 			}
 
 			GUI.BringWindowToBack(id);
+
+			Tools.PutStringBuilder(rightHUD);
 		}
 	}
 }

--- a/VOID_HUDAdvanced.cs
+++ b/VOID_HUDAdvanced.cs
@@ -103,7 +103,7 @@
 		{
 			StringBuilder leftHUD;
 
-			leftHUD = new StringBuilder();
+			leftHUD = Tools.GetStringBuilder();
 
 			VOID_Styles.labelHud.alignment = TextAnchor.UpperRight;
 
@@ -161,13 +161,15 @@
 			}
 
 			GUI.BringWindowToBack(id);
+
+			Tools.PutStringBuilder(leftHUD);
 		}
 
 		protected void rightHUDWindow(int id)
 		{
 			StringBuilder rightHUD;
 
-			rightHUD = new StringBuilder();
+			rightHUD = Tools.GetStringBuilder();
 
 			VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft;
 
@@ -225,6 +227,8 @@
 			}
 
 			GUI.BringWindowToBack(id);
+
+			Tools.PutStringBuilder(rightHUD);
 		}
 
 		public override void DrawGUI()

--- a/VOID_Orbital.cs
+++ b/VOID_Orbital.cs
@@ -123,11 +123,11 @@
 			this.precisionValues = new IntCollection (4, this._precisionValues);
 		}
 
-		public override void Save (KSP.IO.PluginConfiguration config)
+		public override void Save (KSP.IO.PluginConfiguration config, string sceneKey)
 		{
 			this._precisionValues.value = this.precisionValues.collection;
 
-			base.Save (config);
+			base.Save (config, sceneKey);
 		}
 	}
 }

--- a/VOID_Rendezvous.cs
+++ b/VOID_Rendezvous.cs
@@ -57,8 +57,8 @@
 
 		public override void ModuleWindow(int id)
 		{
-			Vessel rendezvessel = new Vessel();
-			CelestialBody rendezbody = new CelestialBody();
+			Vessel rendezvessel;
+			CelestialBody rendezbody;
 
 			if (this.RegisterModule == null)
 			{

--- a/VOID_SurfAtmo.cs
+++ b/VOID_SurfAtmo.cs
@@ -58,9 +58,9 @@
 			this.precisionValues[idx] = (ushort)VOID_Data.trueAltitude.DoGUIHorizontal(this.precisionValues[idx]);
 			idx++;
 
-			VOID_Data.surfLatitude.DoGUIHorizontal();
+			VOID_Data.surfLatitudeString.DoGUIHorizontal();
 
-			VOID_Data.surfLongitude.DoGUIHorizontal();
+			VOID_Data.surfLongitudeString.DoGUIHorizontal();
 
 			VOID_Data.vesselHeading.DoGUIHorizontal();
 
@@ -105,11 +105,11 @@
 			this.precisionValues = new IntCollection(4, this._precisionValues);
 		}
 
-		public override void Save(KSP.IO.PluginConfiguration config)
+		public override void Save(KSP.IO.PluginConfiguration config, string sceneKey)
 		{
 			this._precisionValues.value = this.precisionValues.collection;
 
-			base.Save(config);
+			base.Save(config, sceneKey);
 		}
 	}
 }