VOID_Orbital: changed up windowID to pull from the new incrementing accessor, moved _Name into the ctor, which still bugs me.
VOID_Orbital: changed up windowID to pull from the new incrementing accessor, moved _Name into the ctor, which still bugs me.

file:a/AVOID_Configurable.cs (deleted)
--- a/AVOID_Configurable.cs
+++ /dev/null
@@ -1,29 +1,1 @@
-//
-//  AVOID_Configurable.cs
-//
-//  Author:
-//       toadicus <>
-//
-//  Copyright (c) 2013 toadicus
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-using System;
 
-namespace VOID
-{
-	[AttributeUsage(AttributeTargets.Method)]
-	public class AVOID_Configurable : Attribute { }
-}
-
-

--- a/IVOID_Module.cs
+++ b/IVOID_Module.cs
@@ -25,7 +25,6 @@
 	public interface IVOID_Module
 	{
 		string Name { get; }
-		bool hasConfigurables { get; }
 		bool toggleActive { get; set; }
 		bool guiRunning { get; }
 

file:a/Tools.cs -> file:b/Tools.cs
--- a/Tools.cs
+++ b/Tools.cs
@@ -32,13 +32,13 @@
 
 namespace VOID
 {
-	public class VOIDLabels
+	public static class VOIDLabels
 	{
-		public string void_primary;
-		public string void_altitude_asl;
-		public string void_velocity;
-		public string void_apoapsis;
-		public string void_periapsis;
+		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";
 	}
 
 	public static class Tools

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -55,6 +55,8 @@
 			}
 		}
 
+		public static double Constant_G = 6.674e-11;
+
 		/*
 		 * Fields
 		 * */
@@ -90,6 +92,11 @@
 		protected string VOIDIconOffPath = "VOID/Textures/void_icon_off";
 
 		protected int windowBaseID = -96518722;
+		protected int _windowID = 0;
+
+		protected bool GUIStylesLoaded = false;
+
+		protected Dictionary<string, GUIStyle> _LabelStyles = new Dictionary<string, GUIStyle>();
 
 		[AVOID_SaveValue("togglePower")]
 		public VOID_SaveValue<bool> togglePower = true;
@@ -135,11 +142,23 @@
 			}
 		}
 
-		public Vessel vessel
+		public int windowID
 		{
 			get
 			{
-				return FlightGlobals.ActiveVessel;
+				if (this._windowID == 0)
+				{
+				this._windowID = this.windowBaseID;
+				}
+				return this._windowID++;
+			}
+		}
+
+		public Dictionary<string, GUIStyle> LabelStyles
+		{
+			get
+			{
+				return this._LabelStyles;
 			}
 		}
 
@@ -261,6 +280,24 @@
 					this.powerAvailable = false;
 				}
 			}
+		}
+
+		protected void LoadGUIStyles()
+		{
+			this.LabelStyles["center"] = new GUIStyle(GUI.skin.label);
+			this.LabelStyles["center"].normal.textColor = Color.white;
+			this.LabelStyles["center"].alignment = TextAnchor.UpperCenter;
+
+			this.LabelStyles["center_bold"] = new GUIStyle(GUI.skin.label);
+			this.LabelStyles["center_bold"].normal.textColor = Color.white;
+			this.LabelStyles["center_bold"].alignment = TextAnchor.UpperCenter;
+			this.LabelStyles["center_bold"].fontStyle = FontStyle.Bold;
+
+			this.LabelStyles["txt_right"] = new GUIStyle(GUI.skin.label);
+			this.LabelStyles["txt_right"].normal.textColor = Color.white;
+			this.LabelStyles["txt_right"].alignment = TextAnchor.UpperRight;
+
+			this.GUIStylesLoaded = true;
 		}
 
 		public void VOIDMainWindow(int _)
@@ -321,9 +358,14 @@
 				this.LoadModules ();
 			}
 
+			this._windowID = this.windowBaseID;
+
 			GUI.skin = this.Skin;
 
-			int windowID = this.windowBaseID;
+			if (!this.GUIStylesLoaded)
+			{
+				this.LoadGUIStyles ();
+			}
 
 			this.VOIDIconTexture = this.VOIDIconOff;  //icon off default
 			if (this.togglePower) this.VOIDIconTexture = this.VOIDIconOn;     //or on if power_toggle==true
@@ -337,7 +379,7 @@
 				Rect _mainWindowPos = this.mainWindowPos;
 
 				_mainWindowPos = GUILayout.Window (
-					++windowID,
+					this.windowID,
 					_mainWindowPos,
 					this.VOIDMainWindow,
 					string.Join (" ", new string[] {this.VoidName, this.VoidVersion}),
@@ -356,7 +398,7 @@
 				Rect _configWindowPos = this.configWindowPos;
 
 				_configWindowPos = GUILayout.Window (
-					++windowID,
+					this.windowID,
 					_configWindowPos,
 					this.VOIDConfigWindow,
 					string.Join (" ", new string[] {this.VoidName, "Configuration"}),

--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -41,8 +41,6 @@
 
 		protected GUIStyle labelStyle;
 
-		protected Vessel vessel = null;
-
 		/*
 		 * Properties
 		 * */
@@ -70,6 +68,7 @@
 		public VOID_HUD() : base()
 		{
 			this._Name = "Heads-Up Display";
+
 			this.textColors.Add(Color.green);
 			this.textColors.Add(Color.black);
 			this.textColors.Add(Color.white);
@@ -92,14 +91,9 @@
 
 			GUI.skin = VOID_Core.Instance.Skin;
 
-			if (vessel == null)
+			if (this.vessel == null)
 			{
-				vessel = FlightGlobals.ActiveVessel;
-			}
-
-			if (vessel != FlightGlobals.ActiveVessel)
-			{
-				vessel = FlightGlobals.ActiveVessel;
+				return;
 			}
 
 			if (VOID_Core.Instance.powerAvailable)
@@ -108,26 +102,26 @@
 
 				GUI.Label (
 					new Rect ((Screen.width * .2083f), 0, 300f, 70f),
-					"Obt Alt: " + Tools.MuMech_ToSI (vessel.orbit.altitude) + "m" +
-					" Obt Vel: " + Tools.MuMech_ToSI (vessel.orbit.vel.magnitude) + "m/s" +
-					"\nAp: " + Tools.MuMech_ToSI (vessel.orbit.ApA) + "m" +
-					" ETA " + Tools.ConvertInterval (vessel.orbit.timeToAp) +
-					"\nPe: " + Tools.MuMech_ToSI (vessel.orbit.PeA) + "m" +
-					" ETA " + Tools.ConvertInterval (vessel.orbit.timeToPe) +
-					"\nInc: " + vessel.orbit.inclination.ToString ("F3") + "°",
+					"Obt Alt: " + Tools.MuMech_ToSI (this.vessel.orbit.altitude) + "m" +
+					" Obt Vel: " + Tools.MuMech_ToSI (this.vessel.orbit.vel.magnitude) + "m/s" +
+					"\nAp: " + Tools.MuMech_ToSI (this.vessel.orbit.ApA) + "m" +
+					" ETA " + Tools.ConvertInterval (this.vessel.orbit.timeToAp) +
+					"\nPe: " + Tools.MuMech_ToSI (this.vessel.orbit.PeA) + "m" +
+					" ETA " + Tools.ConvertInterval (this.vessel.orbit.timeToPe) +
+					"\nInc: " + this.vessel.orbit.inclination.ToString ("F3") + "°",
 					labelStyle);
 				// Toadicus edit: Added "Biome: " line to surf/atmo HUD
 				GUI.Label (
 					new Rect ((Screen.width * .625f), 0, 300f, 90f),
-					"Srf Alt: " + Tools.MuMech_ToSI (Tools.TrueAltitude (vessel)) + "m" +
-					" Srf Vel: " + Tools.MuMech_ToSI (vessel.srf_velocity.magnitude) + "m/s" +
-					"\nVer: " + Tools.MuMech_ToSI (vessel.verticalSpeed) + "m/s" +
-					" Hor: " + Tools.MuMech_ToSI (vessel.horizontalSrfSpeed) + "m/s" +
-					"\nLat: " + Tools.GetLatitudeString (vessel, "F3") +
-					" Lon: " + Tools.GetLongitudeString (vessel, "F3") +
-					"\nHdg: " + Tools.MuMech_get_heading (vessel).ToString ("F2") + "° " +
-					Tools.get_heading_text (Tools.MuMech_get_heading (vessel)) +
-					"\nBiome: " + Tools.Toadicus_GetAtt (vessel).name,
+					"Srf Alt: " + Tools.MuMech_ToSI (Tools.TrueAltitude (this.vessel)) + "m" +
+					" Srf Vel: " + Tools.MuMech_ToSI (this.vessel.srf_velocity.magnitude) + "m/s" +
+					"\nVer: " + Tools.MuMech_ToSI (this.vessel.verticalSpeed) + "m/s" +
+					" Hor: " + Tools.MuMech_ToSI (this.vessel.horizontalSrfSpeed) + "m/s" +
+					"\nLat: " + Tools.GetLatitudeString (this.vessel, "F3") +
+					" Lon: " + Tools.GetLongitudeString (this.vessel, "F3") +
+					"\nHdg: " + Tools.MuMech_get_heading (this.vessel).ToString ("F2") + "° " +
+					Tools.get_heading_text (Tools.MuMech_get_heading (this.vessel)) +
+					"\nBiome: " + Tools.Toadicus_GetAtt (this.vessel).name,
 					labelStyle);
 			}
 			else

--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -33,21 +33,12 @@
 		[AVOID_SaveValue("Active")]
 		protected VOID_SaveValue<bool> _Active = true;
 		protected bool _Running = false;
-		protected bool _hasConfigurables = false;
 
 		protected string _Name;
 
 		/*
 		 * Properties
 		 * */
-		public virtual bool hasConfigurables
-		{
-			get
-			{
-				return this._hasConfigurables;
-			}
-		}
-
 		public virtual bool toggleActive
 		{
 			get
@@ -73,6 +64,14 @@
 			get
 			{
 				return this._Name;
+			}
+		}
+
+		public virtual Vessel vessel
+		{
+			get
+			{
+				return FlightGlobals.ActiveVessel;
 			}
 		}
 

file:b/VOID_Orbital.cs (new)
--- /dev/null
+++ b/VOID_Orbital.cs
@@ -1,1 +1,164 @@
+//
+//  VOID_Orbital.cs
+//
+//  Author:
+//       toadicus <>
+//
+//  Copyright (c) 2013 toadicus
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+using KSP;
+using System;
+using UnityEngine;
 
+namespace VOID
+{
+	public class VOID_Orbital : VOID_Module
+	{
+		[AVOID_SaveValue("OrbitalWindowPos")]
+		protected Rect OrbitalWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f);
+
+		[AVOID_SaveValue("toggleExtendedOribtal")]
+		protected bool toggleExtendedOribtal = false;
+
+		public VOID_Orbital()
+		{
+			this._Name = "Orbital Information";
+		}
+
+		public void OrbitalWindow(int _)
+		{
+			// Toadicus edit: added local sidereal longitude.
+			double LSL = vessel.longitude + vessel.orbit.referenceBody.rotationAngle;
+			LSL = Tools.FixDegreeDomain (LSL);
+
+            GUILayout.BeginVertical();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+            GUILayout.Label(VOIDLabels.void_primary + ":");
+            GUILayout.Label(vessel.mainBody.bodyName, GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+			GUILayout.Label(VOIDLabels.void_altitude_asl + ":");
+			GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.altitude) + "m", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+			GUILayout.Label(VOIDLabels.void_velocity + ":");
+			GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.vel.magnitude) + "m/s", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+			GUILayout.Label(VOIDLabels.void_apoapsis + ":");
+			GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.ApA) + "m", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+            GUILayout.Label("Time to Ap:");
+            GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToAp), GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+			GUILayout.Label(VOIDLabels.void_periapsis + ":");
+			GUILayout.Label(Tools.MuMech_ToSI(vessel.orbit.PeA) + "m", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+            GUILayout.Label("Time to Pe:");
+            GUILayout.Label(Tools.ConvertInterval(vessel.orbit.timeToPe), GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+            GUILayout.Label("Inclination:");
+            GUILayout.Label(vessel.orbit.inclination.ToString("F3") + "°", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            double r_vessel = vessel.mainBody.Radius + vessel.mainBody.GetAltitude(vessel.findWorldCenterOfMass());
+            double g_vessel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / Math.Pow(r_vessel, 2);
+            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+            GUILayout.Label("Gravity:");
+			GUILayout.Label(Tools.MuMech_ToSI(g_vessel) + "m/s²", GUILayout.ExpandWidth(false));
+            GUILayout.EndHorizontal();
+
+            toggleExtendedOribtal = GUILayout.Toggle(toggleExtendedOribtal, "Extended info");
+
+            if (toggleExtendedOribtal)
+            {
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Period:");
+                GUILayout.Label(Tools.ConvertInterval(vessel.orbit.period), GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Semi-major axis:");
+                GUILayout.Label((vessel.orbit.semiMajorAxis / 1000).ToString("##,#") + "km", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Eccentricity:");
+                GUILayout.Label(vessel.orbit.eccentricity.ToString("F4"), GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+				// Toadicus edit: convert mean anomaly into degrees.
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Mean anomaly:");
+                GUILayout.Label((vessel.orbit.meanAnomaly * 180d / Math.PI).ToString("F3") + "°", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("True anomaly:");
+                GUILayout.Label(vessel.orbit.trueAnomaly.ToString("F3") + "°", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+				// Toadicus edit: convert eccentric anomaly into degrees.
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Eccentric anomaly:");
+                GUILayout.Label((vessel.orbit.eccentricAnomaly * 180d / Math.PI).ToString("F3") + "°", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Long. ascending node:");
+                GUILayout.Label(vessel.orbit.LAN.ToString("F3") + "°", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+                GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+                GUILayout.Label("Arg. of periapsis:");
+                GUILayout.Label(vessel.orbit.argumentOfPeriapsis.ToString("F3") + "°", GUILayout.ExpandWidth(false));
+                GUILayout.EndHorizontal();
+
+				// Toadicus edit: added local sidereal longitude.
+				GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+				GUILayout.Label("Local Sidereal Longitude:");
+				GUILayout.Label(LSL.ToString("F3") + "°", VOID_Core.Instance.LabelStyles["txt_right"]);
+				GUILayout.EndHorizontal();
+            }
+
+            GUILayout.EndVertical();
+            GUI.DragWindow();
+		}
+
+		public override void DrawGUI()
+		{
+			OrbitalWindowPos = GUILayout.Window(
+				VOID_Core.Instance.windowID,
+				OrbitalWindowPos,
+				this.OrbitalWindow,
+				this.Name, GUILayout.Width(250),
+				GUILayout.Height(50));
+		}
+	}
+}
+
+