No longer rebuilding the table when it doesn't need it.
No longer rebuilding the table when it doesn't need it.

--- a/VOID_CareerTracker.cs
+++ b/VOID_CareerTracker.cs
@@ -24,6 +24,9 @@
 				return VCTScenario.Instance;
 			}
 		}
+
+		private int trackerCount;
+		private bool trackerChanged;
 
 		private Table ledgerTable;
 
@@ -56,21 +59,8 @@
 			get
 			{
 				return (
-					(this.core.updateTimer - this.lastUpdate) > (this.core.updatePeriod * 2d) ||
-					(this.lastUpdate > this.core.updateTimer)
-				);
-			}
-		}
-
-		protected override Action<int> DecoratedWindow
-		{
-			get
-			{
-				return VOID_WindowModule.DecorateWindow(
-					this.ModuleWindow,
-					this.WindowPos,
-					(bool active) => { this.toggleActive = active; },
-					false
+				    (this.core.UpdateTimer - this.lastUpdate) > (this.core.UpdatePeriod * 2d) ||
+				    (this.lastUpdate > this.core.UpdateTimer)
 				);
 			}
 		}
@@ -163,9 +153,9 @@
 
 			this.waitToResize = 5;
 
-			this.includeFunds = true;
-			this.includeScience = true;
-			this.includeReputation = true;
+			this.includeFunds = (VOID_SaveValue<bool>)true;
+			this.includeScience = (VOID_SaveValue<bool>)true;
+			this.includeReputation = (VOID_SaveValue<bool>)true;
 
 			this.core.onSkinChanged += this.onSkinChangedHandler;
 
@@ -183,10 +173,19 @@
 			this.reasonCol.CellStyle = VOID_Styles.labelCenter;
 		}
 
-		public override void ModuleWindow(int _)
+		public override void ModuleWindow(int id)
 		{
 			if (this.timeToUpdate)
 			{
+				int currentTrackerCount = Tracker.TransactionList.Count;
+
+				this.trackerChanged = (this.trackerCount != currentTrackerCount);
+
+				if (trackerChanged)
+				{
+					this.trackerCount = currentTrackerCount;
+				}
+
 				if (this.clearTable)
 				{
 					this.ledgerTable.ClearTable();
@@ -215,57 +214,16 @@
 					this.clearTable = false;
 
 					this.waitToResize = 5;
-				}
-				else
+
+					this.updateTable();
+				}
+				else if (trackerChanged)
 				{
 					this.ledgerTable.ClearColumns();
-				}
-
-				double aggregateFunds = Tracker.CurrentFunds;
-				float aggregateScience = Tracker.CurrentScience;
-				float aggregateReputation = Tracker.CurrentReputation;
-
-				for (int i = Tracker.TransactionList.Count - 1; i >= 0; i--)
-				{
-					CurrencyTransaction trans = Tracker.TransactionList[i];
-
-					bool skipTrans = true;
-
-					if (this.IncludeFunds && trans.FundsDelta != 0f)
-					{
-						skipTrans = false;
-					}
-
-					if (this.IncludeScience && trans.ScienceDelta != 0f)
-					{
-						skipTrans = false;
-					}
-
-					if (this.IncludeReputation && trans.ReputationDelta != 0f)
-					{
-						skipTrans = false;
-					}
-
-					if (skipTrans)
-					{
-						continue;
-					}
-
-					this.timeStampCol.Add(VOID_Tools.FormatDate(trans.TimeStamp));
-
-					this.reasonCol.Add(Enum.GetName(typeof(TransactionReasons), trans.Reason));
-
-					this.fundsDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.FundsDelta, "#,##0.00"));
-					this.fundsTotalCol.Add(aggregateFunds);
-					aggregateFunds -= (double)trans.FundsDelta;
-
-					this.scienceDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.ScienceDelta, "#,##0"));
-					this.scienceTotalCol.Add(aggregateScience);
-					aggregateScience -= trans.ScienceDelta;
-
-					this.repDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.ReputationDelta, "#,##0"));
-					this.repTotalCol.Add(aggregateReputation);
-					aggregateReputation -= trans.ReputationDelta;
+
+					this.waitToResize = 5;
+
+					this.updateTable();
 				}
 			}
 
@@ -275,7 +233,7 @@
 
 			GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(false));
 
-			this.IncludeFunds  = GUILayout.Toggle(
+			this.IncludeFunds = GUILayout.Toggle(
 				this.IncludeFunds,
 				"Funds",
 				GUI.skin.button,
@@ -341,7 +299,7 @@
 				GUILayout.Label("Select a filter option to display transactions.");
 			}
 
-			GUI.DragWindow();
+			base.ModuleWindow(id);
 		}
 
 		public override void DrawConfigurables()
@@ -349,10 +307,10 @@
 			if (GUILayout.Button("Write Transaction Database to CSV"))
 			{
 				string baseName = string.Format(
-					"{0}-{1}.csv",
-					HighLogic.CurrentGame.Title,
-					(int)Planetarium.GetUniversalTime()
-				);
+					                  "{0}-{1}.csv",
+					                  HighLogic.CurrentGame.Title,
+					                  (int)Planetarium.GetUniversalTime()
+				                  );
 
 				var file = KSP.IO.File.Create<VOID_CareerTracker>(baseName, null);
 
@@ -363,13 +321,13 @@
 				file.Write(lineBytes, 0, lineBytes.Length);
 
 				string transLine = string.Format(
-					"{0}, {1}, \"{2}\", \"{3}\", \"{4}\"\n",
-					"TimeStamp",
-					"Reason",
-					"Funds Delta",
-					"Science Delta",
-					"Reputation Delta"
-				);
+					                   "{0}, {1}, \"{2}\", \"{3}\", \"{4}\"\n",
+					                   "TimeStamp",
+					                   "Reason",
+					                   "Funds Delta",
+					                   "Science Delta",
+					                   "Reputation Delta"
+				                   );
 
 				lineBytes = enc.GetBytes(transLine);
 
@@ -392,6 +350,57 @@
 				}
 			}
 		}
+
+		private void updateTable()
+		{
+
+			double aggregateFunds = Tracker.CurrentFunds;
+			float aggregateScience = Tracker.CurrentScience;
+			float aggregateReputation = Tracker.CurrentReputation;
+
+			for (int i = Tracker.TransactionList.Count - 1; i >= 0; i--)
+			{
+				CurrencyTransaction trans = Tracker.TransactionList[i];
+
+				bool skipTrans = true;
+
+				if (this.IncludeFunds && trans.FundsDelta != 0f)
+				{
+					skipTrans = false;
+				}
+
+				if (this.IncludeScience && trans.ScienceDelta != 0f)
+				{
+					skipTrans = false;
+				}
+
+				if (this.IncludeReputation && trans.ReputationDelta != 0f)
+				{
+					skipTrans = false;
+				}
+
+				if (skipTrans)
+				{
+					continue;
+				}
+
+				this.timeStampCol.Add(VOID_Tools.FormatDate(trans.TimeStamp));
+
+				this.reasonCol.Add(Enum.GetName(typeof(TransactionReasons), trans.Reason));
+
+				this.fundsDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.FundsDelta, "#,##0.00"));
+				this.fundsTotalCol.Add(aggregateFunds);
+				aggregateFunds -= (double)trans.FundsDelta;
+
+				this.scienceDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.ScienceDelta, "#,##0"));
+				this.scienceTotalCol.Add(aggregateScience);
+				aggregateScience -= trans.ScienceDelta;
+
+				this.repDeltaCol.Add(VOID_CareerStatus.formatDelta(trans.ReputationDelta, "#,##0"));
+				this.repTotalCol.Add(aggregateReputation);
+				aggregateReputation -= trans.ReputationDelta;
+			}
+		}
 	}
 }