Moved EventSniffer to ToadicusTools.
Moved EventSniffer to ToadicusTools.

file:a/EventSniffer.cs (deleted)
--- a/EventSniffer.cs
+++ /dev/null
@@ -1,207 +1,1 @@
-// AntennaRange © 2014 toadicus
-//
-// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a
-// copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/
 
-#if DEBUG
-using KSP;
-using System;
-using System.Text;
-using UnityEngine;
-
-namespace AntennaRange
-{
-	[KSPAddon(KSPAddon.Startup.Flight, false)]
-	public class EventSniffer : MonoBehaviour
-	{
-		public void Awake()
-		{
-			GameEvents.onSameVesselDock.Add(this.onSameVesselDockUndock);
-			GameEvents.onSameVesselUndock.Add(this.onSameVesselDockUndock);
-			GameEvents.onPartUndock.Add(this.onPartUndock);
-			GameEvents.onUndock.Add(this.onReportEvent);
-			GameEvents.onPartCouple.Add(this.onPartCouple);
-			GameEvents.onPartJointBreak.Add(this.onPartJointBreak);
-		}
-
-		public void Destroy()
-		{
-			GameEvents.onSameVesselDock.Remove(this.onSameVesselDockUndock);
-			GameEvents.onSameVesselUndock.Remove(this.onSameVesselDockUndock);
-			GameEvents.onPartUndock.Remove(this.onPartUndock);
-			GameEvents.onUndock.Remove(this.onReportEvent);
-			GameEvents.onPartCouple.Remove(this.onPartCouple);
-			GameEvents.onPartJointBreak.Remove(this.onPartJointBreak);
-		}
-
-		public void onSameVesselDockUndock(GameEvents.FromToAction<ModuleDockingNode, ModuleDockingNode> data)
-		{
-			this.FromModuleToModuleHelper(
-				this.getStringBuilder(),
-				new GameEvents.FromToAction<PartModule, PartModule>(data.from, data.to)
-			);
-		}
-
-		public void onPartJointBreak(PartJoint joint)
-		{
-			this.PartJointHelper(this.getStringBuilder(), joint);
-		}
-
-		public void onPartUndock(Part part)
-		{
-			this.PartEventHelper(this.getStringBuilder(), part);
-		}
-
-		public void onReportEvent(EventReport data)
-		{
-			this.EventReportHelper(this.getStringBuilder(), data);
-		}
-
-		public void onPartCouple(GameEvents.FromToAction<Part, Part> data)
-		{
-			this.FromPartToPartHelper(this.getStringBuilder(), data);
-		}
-
-		internal void EventReportHelper(StringBuilder sb, EventReport data)
-		{
-			sb.Append("\n\tOrigin Part:");
-			this.appendPartAncestry(sb, data.origin);
-
-			sb.AppendFormat(
-				"\n\tother: '{0}'" +
-				"\n\tmsg: '{1}'" +
-				"\n\tsender: '{2}'",
-				data.other,
-				data.msg,
-				data.sender
-			);
-
-			Debug.Log(sb.ToString());
-		}
-
-		internal void PartEventHelper(StringBuilder sb, Part part)
-		{
-			this.appendPartAncestry(sb, part);
-
-			Debug.Log(sb.ToString());
-		}
-
-		internal void FromPartToPartHelper(StringBuilder sb, GameEvents.FromToAction<Part, Part> data)
-		{
-			sb.Append("\n\tFrom:");
-
-			this.appendPartAncestry(sb, data.from);
-
-			sb.Append("\n\tTo:");
-
-			this.appendPartAncestry(sb, data.to);
-
-			Debug.Log(sb.ToString());
-		}
-
-		internal void FromModuleToModuleHelper(StringBuilder sb, GameEvents.FromToAction<PartModule, PartModule> data)
-		{
-			sb.Append("\n\tFrom:");
-
-			this.appendModuleAncestry(sb, data.from);
-
-			sb.Append("\n\tTo:");
-
-			this.appendModuleAncestry(sb, data.to);
-
-			Debug.Log(sb.ToString());
-		}
-
-		internal void PartJointHelper(StringBuilder sb, PartJoint joint)
-		{
-			sb.Append("PartJoint: ");
-			if (joint != null)
-			{
-				sb.Append(joint);
-				this.appendPartAncestry(sb, joint.Host);
-			}
-			else
-			{
-				sb.Append("null");
-			}
-
-			Debug.Log(sb.ToString());
-		}
-
-		internal StringBuilder appendModuleAncestry(StringBuilder sb, PartModule module, uint tabs = 1)
-		{
-			sb.Append('\n');
-			for (ushort i=0; i < tabs; i++)
-			{
-				sb.Append('\t');
-			}
-			sb.Append("Module: ");
-
-			if (module != null)
-			{
-				sb.Append(module.moduleName);
-				this.appendPartAncestry(sb, module.part, tabs + 1u);
-			}
-			else
-			{
-				sb.Append("null");
-			}
-
-			return sb;
-		}
-
-		internal StringBuilder appendPartAncestry(StringBuilder sb, Part part, uint tabs = 1)
-		{
-			sb.Append('\n');
-			for (ushort i=0; i < tabs; i++)
-			{
-				sb.Append('\t');
-			}
-			sb.Append("Part: ");
-
-			if (part != null)
-			{
-				sb.AppendFormat("'{0}' ({1})", part.partInfo.title, part.partName);
-				this.appendVessel(sb, part.vessel, tabs + 1u);
-			}
-			else
-			{
-				sb.Append("null");
-			}
-
-			return sb;
-		}
-
-		internal StringBuilder appendVessel(StringBuilder sb, Vessel vessel, uint tabs = 1)
-		{
-			sb.Append('\n');
-			for (ushort i=0; i < tabs; i++)
-			{
-				sb.Append('\t');
-			}
-			sb.Append("Vessel: ");
-
-			if (vessel != null)
-			{
-				sb.AppendFormat("'{0}' ({1})", vessel.vesselName, vessel.id);
-			}
-			else
-			{
-				sb.Append("null");
-			}
-
-			return sb;
-		}
-
-		internal StringBuilder getStringBuilder()
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.AppendFormat("{0}: called {1} ",
-				this.GetType().Name,
-				new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name
-			);
-			return sb;
-		}
-	}
-}
-#endif

--- a/ModuleLimitedDataTransmitter.cs
+++ b/ModuleLimitedDataTransmitter.cs
@@ -204,7 +204,7 @@
 
 			if (state >= StartState.PreLaunch)
 			{
-				this.relay = new AntennaRelay(vessel);
+				this.relay = new AntennaRelay(this);
 				this.relay.maxTransmitDistance = this.maxTransmitDistance;
 
 				this.UImaxTransmitDistance = Tools.MuMech_ToSI(this.maxTransmitDistance) + "m";
@@ -330,8 +330,31 @@
 		// returns false.
 		public new void TransmitData(List<ScienceData> dataQueue)
 		{
+			this.PreTransmit_SetPacketSize();
+			this.PreTransmit_SetPacketResourceCost();
+
 			if (this.CanTransmit())
 			{
+				StringBuilder message = new StringBuilder();
+
+				message.Append("[");
+				message.Append(base.part.partInfo.title);
+				message.Append("]: ");
+
+				message.Append("Beginning transmission ");
+
+				if (this.relay.nearestRelay == null)
+				{
+					message.Append("directly to Kerbin.");
+				}
+				else
+				{
+					message.Append("via ");
+					message.Append(this.relay.nearestRelay);
+				}
+
+				ScreenMessages.PostScreenMessage(message.ToString(), 4f, ScreenMessageStyle.UPPER_LEFT);
+
 				base.TransmitData(dataQueue);
 			}
 			else
@@ -451,7 +474,8 @@
 				"DataRate: {9}\n" +
 				"DataResourceCost: {10}\n" +
 				"TransmitterScore: {11}\n" +
-				"NearestRelay: {12}",
+				"NearestRelay: {12}\n" +
+				"Vessel ID: {13}",
 				this.name,
 				this._basepacketSize,
 				base.packetSize,
@@ -464,9 +488,31 @@
 				this.DataRate,
 				this.DataResourceCost,
 				ScienceUtil.GetTransmitterScore(this),
-				this.relay.FindNearestRelay()
+				this.relay.FindNearestRelay(),
+				this.vessel.id
 				);
-			ScreenMessages.PostScreenMessage (new ScreenMessage (msg, 4f, ScreenMessageStyle.UPPER_RIGHT));
+			Tools.PostDebugMessage(msg);
+		}
+
+		[KSPEvent (guiName = "Dump Vessels", active = true, guiActive = true)]
+		public void PrintAllVessels()
+		{
+			StringBuilder sb = new StringBuilder();
+
+			sb.Append("Dumping FlightGlobals.Vessels:");
+
+			foreach (Vessel vessel in FlightGlobals.Vessels)
+			{
+				sb.AppendFormat("\n'{0} ({1})'", vessel.vesselName, vessel.id);
+			}
+
+			Tools.PostDebugMessage(sb.ToString());
+		}
+
+		[KSPEvent (guiName = "Dump RelayDB", active = true, guiActive = true)]
+		public void DumpRelayDB()
+		{
+			RelayDatabase.Instance.Dump();
 		}
 		#endif
 	}

--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -25,7 +25,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.6.3.*")]
+[assembly: AssemblyVersion("1.0.0.*")]
 // 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/ProtoAntennaRelay.cs
+++ b/ProtoAntennaRelay.cs
@@ -26,11 +26,16 @@
 	 * */
 	public class ProtoAntennaRelay : AntennaRelay, IAntennaRelay
 	{
-		// Stores the relay prefab
-		protected IAntennaRelay relayPrefab;
-
 		// Stores the prototype part so we can make sure we haven't exploded or so.
 		protected ProtoPartSnapshot protoPart;
+
+		public override Vessel vessel
+		{
+			get
+			{
+				return this.protoPart.pVesselRef.vesselRef;
+			}
+		}
 
 		/// <summary>
 		/// The maximum distance at which this transmitter can operate.
@@ -40,7 +45,7 @@
 		{
 			get
 			{
-				return relayPrefab.maxTransmitDistance;
+				return moduleRef.maxTransmitDistance;
 			}
 		}
 
@@ -87,7 +92,7 @@
 		public override string ToString()
 		{
 			return string.Format(
-				"{0} on {1}.",
+				"{0} on {1} (proto)",
 				this.title,
 				this.protoPart.pVesselRef.vesselName
 			);
@@ -98,11 +103,9 @@
 		/// </summary>
 		/// <param name="ms">The ProtoPartModuleSnapshot to wrap</param>
 		/// <param name="vessel">The parent Vessel</param>
-		public ProtoAntennaRelay(IAntennaRelay prefabRelay, ProtoPartSnapshot pps) : base(pps.pVesselRef.vesselRef)
+		public ProtoAntennaRelay(IAntennaRelay prefabRelay, ProtoPartSnapshot pps) : base(prefabRelay)
 		{
-			this.relayPrefab = prefabRelay;
 			this.protoPart = pps;
-			this.vessel = pps.pVesselRef.vesselRef;
 		}
 
 		~ProtoAntennaRelay()