Index: binary-improvements/assembly-patcher/Assembly-Patcher.userprefs
===================================================================
--- binary-improvements/assembly-patcher/Assembly-Patcher.userprefs	(revision 74)
+++ binary-improvements/assembly-patcher/Assembly-Patcher.userprefs	(revision 75)
@@ -3,5 +3,5 @@
   <MonoDevelop.Ide.Workbench ActiveDocument="Main.cs">
     <Files>
-      <File FileName="Main.cs" Line="19" Column="4" />
+      <File FileName="Main.cs" Line="35" Column="161" />
       <File FileName="AssemblyInfo.cs" Line="7" Column="36" />
     </Files>
Index: binary-improvements/assembly-patcher/Main.cs
===================================================================
--- binary-improvements/assembly-patcher/Main.cs	(revision 74)
+++ binary-improvements/assembly-patcher/Main.cs	(revision 75)
@@ -12,6 +12,19 @@
 			ModuleDefinition module = ModuleDefinition.ReadModule ("Assembly-CSharp.dll");
 			telnetPatch (module);
+			connectLogPatch(module);
 			module.Write ("Assembly-CSharp.dll");
 			Console.WriteLine ("Done");
+		}
+
+		private static void connectLogPatch (ModuleDefinition module)
+		{
+			TypeDefinition type = module.GetType ("GameManager");
+
+			if (isPatched (type)) {
+				return;
+			}
+
+			markTypePatched (module, type);
+			addHook (type, "RequestToSpawnPlayer", true, 5, typeof(AllocsRequestToSpawnPlayer).GetMethod ("RequestToSpawnPlayer"));
 		}
 
@@ -25,8 +38,8 @@
 
 			markTypePatched (module, type);
-			patchMethod (type, ".ctor", 1, typeof(AllocsNetTelnetServer).GetMethod ("init"));
-			patchMethod (type, "Disconnect", 0, typeof(AllocsNetTelnetServer).GetMethod ("Disconnect"));
-			patchMethod (type, "SetConsole", 1, typeof(AllocsNetTelnetServer).GetMethod ("SetConsole"));
-			patchMethod (type, "WriteToClient", 1, typeof(AllocsNetTelnetServer).GetMethod ("WriteToClient"));
+			replaceMethod (type, ".ctor", 1, typeof(AllocsNetTelnetServer).GetMethod ("init"));
+			replaceMethod (type, "Disconnect", 0, typeof(AllocsNetTelnetServer).GetMethod ("Disconnect"));
+			replaceMethod (type, "SetConsole", 1, typeof(AllocsNetTelnetServer).GetMethod ("SetConsole"));
+			replaceMethod (type, "WriteToClient", 1, typeof(AllocsNetTelnetServer).GetMethod ("WriteToClient"));
 		}
 
@@ -36,5 +49,23 @@
 		}
 
-		private static void patchMethod (TypeDefinition type, string methodName, int opCount, MethodBase targetMethod)
+		private static void addHook (TypeDefinition type, string methodName, bool addThisRef, int opCount, MethodBase targetMethod)
+		{
+			foreach (MethodDefinition method in type.Methods) {
+				if (method.Name.Equals (methodName)) {
+					Console.WriteLine ("Patching " + methodName);
+					var il = method.Body.GetILProcessor ();
+					var call = il.Create (OpCodes.Call, method.Module.Import (targetMethod));
+					var i = 0;
+					if (addThisRef)
+						il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, 0));
+					for (int op = 0; op < opCount; op++) {
+						il.InsertBefore (method.Body.Instructions [i++], il.Create (OpCodes.Ldarg, op + 1));
+					}
+					il.InsertBefore (method.Body.Instructions [i++], call);
+				}
+			}
+		}
+
+		private static void replaceMethod (TypeDefinition type, string methodName, int opCount, MethodBase targetMethod)
 		{
 			foreach (MethodDefinition method in type.Methods) {
