Index: binary-improvements/assembly-patcher/Assembly-Patcher.userprefs
===================================================================
--- binary-improvements/assembly-patcher/Assembly-Patcher.userprefs	(revision 86)
+++ binary-improvements/assembly-patcher/Assembly-Patcher.userprefs	(revision 93)
@@ -3,5 +3,5 @@
   <MonoDevelop.Ide.Workbench ActiveDocument="Main.cs">
     <Files>
-      <File FileName="Main.cs" Line="28" Column="4" />
+      <File FileName="Main.cs" Line="53" Column="57" />
       <File FileName="AssemblyInfo.cs" Line="21" Column="1" />
     </Files>
Index: binary-improvements/assembly-patcher/Main.cs
===================================================================
--- binary-improvements/assembly-patcher/Main.cs	(revision 86)
+++ binary-improvements/assembly-patcher/Main.cs	(revision 93)
@@ -11,10 +11,26 @@
 		{
 			ModuleDefinition module = ModuleDefinition.ReadModule ("Assembly-CSharp.dll");
+
+			TypeDefinition type = module.GetType ("GameManager");
+			if (isPatched (type)) {
+				Console.WriteLine("Assembly already patched");
+				return;
+			}
+			markTypePatched (module, type);
+
 			telnetPatch (module);
 			connectLogPatch (module);
-			executionLogPatch( module);
+			executionLogPatch (module);
 			publicCommandPermissionsPatch (module);
+			playerDataPatch (module);
 			module.Write ("Assembly-CSharp.dll");
 			Console.WriteLine ("Done");
+		}
+
+		private static void playerDataPatch (ModuleDefinition module)
+		{
+			TypeDefinition type = module.GetType ("GameManager");
+
+			addHook (type, "SavePlayerData", true, 2, true, typeof(PlayerDataStuff).GetMethod ("GM_SavePlayerData"));
 		}
 
@@ -23,9 +39,4 @@
 			TypeDefinition type = module.GetType ("AdminTools");
 
-			if (isPatched (type)) {
-				return;
-			}
-
-			markTypePatched (module, type);
 			replaceMethod (type, "GetAllowedCommandsList", true, 1, typeof(AdminToolsStuff).GetMethod ("GetAllowedCommandsList"));
 		}
@@ -35,9 +46,4 @@
 			TypeDefinition type = module.GetType ("GameManager");
 
-			if (isPatched (type)) {
-				return;
-			}
-
-			markTypePatched (module, type);
 			addHook (type, "RequestToSpawnPlayer", true, 5, true, typeof(AllocsLogFunctions).GetMethod ("RequestToSpawnPlayer"));
 		}
@@ -47,9 +53,4 @@
 			TypeDefinition type = module.GetType ("ConsoleSdtd");
 
-			if (isPatched (type)) {
-				return;
-			}
-
-			markTypePatched (module, type);
 			addHook (type, "ExecuteCmdFromClient", true, 3, false, typeof(AllocsLogFunctions).GetMethod ("ExecuteCmdFromClient"));
 		}
@@ -59,9 +60,4 @@
 			TypeDefinition type = module.GetType ("NetTelnetServer");
 
-			if (isPatched (type)) {
-				return;
-			}
-
-			markTypePatched (module, type);
 			replaceMethod (type, ".ctor", false, 1, typeof(AllocsNetTelnetServer).GetMethod ("init"));
 			replaceMethod (type, "Disconnect", false, 0, typeof(AllocsNetTelnetServer).GetMethod ("Disconnect"));
