Index: binary-improvements/NamePatcher/ManualPatches.cs
===================================================================
--- binary-improvements/NamePatcher/ManualPatches.cs	(revision 107)
+++ binary-improvements/NamePatcher/ManualPatches.cs	(revision 107)
@@ -0,0 +1,404 @@
+using System;
+using Mono.Cecil;
+using Mono.Collections.Generic;
+
+namespace NamePatcher
+{
+	public class ManualPatches
+	{
+		delegate bool MatchField (FieldDefinition fd,TypeReference fdType);
+
+		delegate bool MatchMethod (MethodDefinition md,bool isConstructor,TypeReference retType,int paramCount,Collection<ParameterDefinition> paramList);
+
+		static FieldDefinition getFieldInType (TypeDefinition type, MatchField matcher)
+		{
+			FieldDefinition field = null;
+			if (type != null) {
+				foreach (FieldDefinition fd in type.Fields) {
+					TypeReference fdType = fd.FieldType;
+					if (matcher (fd, fdType)) {
+						if (field != null) {
+							Console.WriteLine ("ERROR: Multiple matching fields found!");
+							return null;
+						}
+						field = fd;
+					}
+				}
+			}
+			return field;
+		}
+
+		static MethodDefinition getMethodInType (TypeDefinition type, MatchMethod matcher)
+		{
+			MethodDefinition method = null;
+			if (type != null) {
+				foreach (MethodDefinition md in type.Methods) {
+					bool cons = md.IsConstructor;
+					TypeReference ret = md.ReturnType;
+					int pCount = md.Parameters.Count;
+					if (matcher (md, cons, ret, pCount, md.Parameters)) {
+						if (method != null) {
+							Console.WriteLine ("ERROR: Multiple matching methods found!");
+							return null;
+						}
+						method = md;
+					}
+				}
+			}
+			return method;
+		}
+
+		static void renameMember (IMemberDefinition fd, string newName)
+		{
+			NameNormalizer.setName (fd, newName);
+		}
+
+		static void makeFieldPublic (FieldDefinition fd)
+		{
+			fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
+		}
+
+		public static void applyManualPatches (ModuleDefinition mainModule)
+		{
+			renameMember (mainModule.GetType ("ItemBlock").BaseType.Resolve (), "ItemBase");
+
+			FieldDefinition fd;
+			MethodDefinition md;
+
+
+			fd = getFieldInType (mainModule.GetType ("Authenticator"), (field, fieldType) => {
+				return fieldType.FullName.Contains ("Dictionary") && fieldType.FullName.Contains ("System.String"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "usersToIDs");
+			} else {
+				Console.WriteLine ("FAILED: Authenticator.usersToIDs");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("PlayerDataFile"), (field, fieldType) => {
+				return field.Name.Equals ("inventory") && fieldType.IsArray; }
+			);
+			if (fd != null) {
+				TypeReference fdType = fd.FieldType;
+				TypeDefinition fdTypeDef = fdType.Resolve ();
+
+				FieldDefinition fd2 = getFieldInType (fdTypeDef, (field, fieldType) => {
+					return fieldType.FullName.Equals ("System.Int32"); }
+				);
+				if (fd2 != null) {
+					renameMember (fd2, "count");
+				} else {
+					Console.WriteLine ("FAILED: InventoryField.count");
+				}
+
+				fd2 = getFieldInType (fdTypeDef, (field, fieldType) => {
+					return fieldType.FullName.Equals ("ItemValue"); }
+				);
+				if (fd2 != null) {
+					renameMember (fd2, "itemValue");
+				} else {
+					Console.WriteLine ("FAILED: InventoryField.itemValue");
+				}
+
+				renameMember (fdTypeDef, "InventoryField");
+			} else {
+				Console.WriteLine ("FAILED: Locate PlayerDataFile.inventory");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("AdminTools"), (field, fieldType) => {
+				return fieldType.FullName.Contains ("List") && fieldType.FullName.Contains ("AdminToolsCommandPermissions"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "commandPermissions");
+			} else {
+				Console.WriteLine ("FAILED: AdminTools.commandPermissions");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("World"), (field, fieldType) => {
+				return fieldType.FullName.Equals ("System.UInt64"); }
+			);
+			if (fd != null) {
+				renameMember (fd, "gameTime");
+			} else {
+				Console.WriteLine ("FAILED: World.gameTime");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("GameManager"), (field, fieldType) => {
+				return fieldType.FullName.Equals ("ConnectionManager"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "connectionManager");
+			} else {
+				Console.WriteLine ("FAILED: GameMananger.connectionManager");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("ConnectionManager"), (field, fieldType) => {
+				return fieldType.FullName.Equals ("GameManager"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "gameManager");
+			} else {
+				Console.WriteLine ("FAILED: ConnectionManager.gameManager");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("ConnectionManager"), (field, fieldType) => {
+				return fieldType.FullName.Contains ("Dictionary") && fieldType.FullName.Contains ("ClientInfo"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "connectedClients");
+			} else {
+				Console.WriteLine ("FAILED: ConnectionManager.connectedClients");
+			}
+
+
+			fd = getFieldInType (mainModule.GetType ("ConnectionManager"), (field, fieldType) => {
+				return fieldType.FullName.Contains ("Dictionary") && fieldType.FullName.Contains ("System.Int32,System.Int32"); }
+			);
+			if (fd != null) {
+				makeFieldPublic (fd);
+				renameMember (fd, "mapClientToEntity");
+			} else {
+				Console.WriteLine ("FAILED: ConnectionManager.mapClientToEntity");
+			}
+
+
+			TypeDefinition typeConsole = null;
+
+			fd = getFieldInType (mainModule.GetType ("NetTelnetServer"), (field, fieldType) => {
+				return NameNormalizer.makeValidName (fieldType.Name) != null; }
+			);
+			if (fd != null) {
+				typeConsole = fd.FieldType.Resolve ();
+				renameMember (fd, "console");
+			} else {
+				Console.WriteLine ("FAILED: NetTelnetServer.console");
+			}
+
+
+			if (typeConsole != null) {
+				// Rename class ConsoleSdtd
+				renameMember (typeConsole, "ConsoleSdtd");
+
+				TypeDefinition typeConsoleCommand = null;
+
+				// Rename methods in ConsoleSdtd
+				md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+					return !isConstructor && paramCount == 3 && paramList [0].ParameterType.Name.Equals ("NetworkPlayer");
+				}
+				);
+				if (md != null) {
+					renameMember (md, "ExecuteCmdFromClient");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.ExecuteCmdFromClient()");
+				}
+
+			
+				md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+					return !isConstructor && method.IsPublic && method.IsVirtual && retType.Name.Equals ("Void") && paramCount == 0 && method.Body.CodeSize > 20;
+				}
+				);
+				if (md != null) {
+					renameMember (md, "Run");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.Run()");
+				}
+
+			
+				md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+					return !isConstructor && method.IsPublic && retType.Name.Equals ("Void") &&
+						paramCount == 1 && paramList [0].ParameterType.Name.Equals ("String") && paramList [0].Name.Equals ("_line");
+				}
+				);
+				if (md != null) {
+					renameMember (md, "SendResult");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.SendResult()");
+				}
+
+			
+				md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+					return !isConstructor && method.IsPrivate && retType.Name.Equals ("Void") &&
+						paramCount == 2 && paramList [0].ParameterType.Name.Equals ("String") && paramList [1].ParameterType.Name.Equals ("String");
+				}
+				);
+				if (md != null) {
+					md.IsPrivate = false;
+					md.IsPublic = true;
+					renameMember (md, "ExecuteClientCmdInternal");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.ExecuteClientCmdInternal()");
+				}
+
+			
+				md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+					return !isConstructor && method.IsPrivate && retType.Name.Equals ("Void") &&
+						paramCount == 2 && paramList [0].ParameterType.Name.Equals ("String") && paramList [1].ParameterType.Name.Equals ("Boolean");
+				}
+				);
+				if (md != null) {
+					md.IsPrivate = false;
+					md.IsPublic = true;
+					renameMember (md, "ExecuteRemoteCmdInternal");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.ExecuteRemoteCmdInternal()");
+				}
+
+			
+				// Rename fields in ConsoleSdtd
+				fd = getFieldInType (typeConsole, (field, fieldType) => {
+					return fieldType.FullName.Equals ("GameManager"); }
+				);
+				if (fd != null) {
+					makeFieldPublic (fd);
+					renameMember (fd, "gameManager");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.gameManager");
+				}
+
+
+				fd = getFieldInType (typeConsole, (field, fieldType) => {
+					if (fieldType.IsGenericInstance) {
+						GenericInstanceType genType = (GenericInstanceType)fieldType;
+						TypeReference genRef = genType.GenericArguments [0];
+						return fieldType.FullName.Contains ("Generic.List") &&
+							genRef.Name.Length < 2 &&
+							NameNormalizer.makeValidName (genRef.Name) != null;
+					}
+					return false;
+				}
+				);
+				if (fd != null) {
+					GenericInstanceType genType = (GenericInstanceType)fd.FieldType;
+					TypeReference genRef = genType.GenericArguments [0];
+					makeFieldPublic (fd);
+					renameMember (fd, "commands");
+
+					typeConsoleCommand = genRef.Resolve ();
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.commands");
+				}
+
+
+				fd = getFieldInType (typeConsole, (field, fieldType) => {
+					return fieldType.Name.Equals ("NetworkPlayer"); }
+				);
+				if (fd != null) {
+					makeFieldPublic (fd);
+					renameMember (fd, "issuerOfCurrentClientCommand");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.issuerOfCurrentClientCommand");
+				}
+
+
+				fd = getFieldInType (typeConsole, (field, fieldType) => {
+					return fieldType.Name.Equals ("NetTelnetServer"); }
+				);
+				if (fd != null) {
+					makeFieldPublic (fd);
+					renameMember (fd, "telnetServer");
+				} else {
+					Console.WriteLine ("FAILED: ConsoleSdtd.telnetServer");
+				}
+
+
+				if (typeConsoleCommand != null) {
+					// Rename class ConsoleCommand
+					renameMember (typeConsoleCommand, "ConsoleCommand");
+
+					// Rename methods in ConsoleSdtd which have parameter or return type ConsoleCommand
+					md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 1 && paramList [0].ParameterType.FullName.Equals ("System.String") && retType.Resolve () == typeConsoleCommand; }
+					);
+					if (md != null) {
+						renameMember (md, "getCommand");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleSdtd.getCommand()");
+					}
+
+			
+					md = getMethodInType (typeConsole, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 1 && paramList [0].ParameterType.Resolve () == typeConsoleCommand; }
+					);
+					if (md != null) {
+						renameMember (md, "AddCommand");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleSdtd.AddCommand()");
+					}
+
+			
+					// Rename methods in ConsoleCommand
+					md = getMethodInType (typeConsoleCommand, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 1 && paramList [0].ParameterType.Resolve () == typeConsole; }
+					);
+					if (md != null) {
+						renameMember (md, "Help");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleCommand.Help()");
+					}
+
+			
+					md = getMethodInType (typeConsoleCommand, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 0 && retType.Name.Equals ("Int32"); }
+					);
+					if (md != null) {
+						renameMember (md, "RepeatInterval");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleCommand.RepeatInterval()");
+					}
+
+			
+					md = getMethodInType (typeConsoleCommand, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 0 && retType.Name.Equals ("String[]"); }
+					);
+					if (md != null) {
+						renameMember (md, "Names");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleCommand.Names()");
+					}
+
+			
+					md = getMethodInType (typeConsoleCommand, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 0 && retType.Name.Equals ("String"); }
+					);
+					if (md != null) {
+						renameMember (md, "Description");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleCommand.Description()");
+					}
+
+			
+					md = getMethodInType (typeConsoleCommand, (method, isConstructor, retType, paramCount, paramList) => {
+						return !isConstructor && paramCount == 1 && paramList [0].ParameterType.IsArray; }
+					);
+					if (md != null) {
+						renameMember (md, "Run");
+					} else {
+						Console.WriteLine ("FAILED: ConsoleCommand.Run()");
+					}
+
+			
+				
+				} else {
+					Console.WriteLine ("ERROR: ConsoleCommand not found");
+				}
+
+			} else {
+				Console.WriteLine ("ERROR: ConsoleSdtd not found");
+			}
+
+		}
+
+	}
+}
+
Index: binary-improvements/NamePatcher/NamePatcher.cs
===================================================================
--- binary-improvements/NamePatcher/NamePatcher.cs	(revision 104)
+++ binary-improvements/NamePatcher/NamePatcher.cs	(revision 107)
@@ -8,4 +8,5 @@
 namespace NamePatcher
 {
+
 	class NamePatcher
 	{
@@ -56,170 +57,7 @@
 		}
 
-		static void applyManualPatches (ModuleDefinition mainModule)
-		{
-			NameNormalizer.setName (mainModule.GetType ("ItemBlock").BaseType.Resolve (), "ItemBase");
-
-			foreach (FieldDefinition fd in mainModule.GetType ("Authenticator").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fdType.FullName.Contains ("Dictionary") && fdType.FullName.Contains ("System.String")) {
-					Console.WriteLine ("Renaming and making public Authenticator field -> usersToIDs");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "usersToIDs");
-				}
-			}
-
-			foreach (FieldDefinition fd in mainModule.GetType("PlayerDataFile").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fd.Name.Equals ("inventory") && fdType.IsArray) {
-					foreach (FieldDefinition fd2 in fdType.Resolve().Fields) {
-						TypeReference fd2Type = fd2.FieldType;
-						if (fd2Type.FullName.Equals ("System.Int32")) {
-							Console.WriteLine ("Renaming inventory field field -> count");
-							NameNormalizer.setName (fd2, "count");
-						}
-						if (fd2Type.FullName.Equals ("ItemValue")) {
-							Console.WriteLine ("Renaming inventory field field -> itemValue");
-							NameNormalizer.setName (fd2, "itemValue");
-						}
-					}
-					Console.WriteLine ("Renaming inventory field class -> InventoryField");
-					NameNormalizer.setName (fdType.Resolve (), "InventoryField");
-				}
-			}
-
-			foreach (FieldDefinition fd in mainModule.GetType ("AdminTools").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fdType.FullName.Contains ("List") && fdType.FullName.Contains ("AdminToolsCommandPermissions")) {
-					Console.WriteLine ("Renaming and making public admin tools field -> commandPermissions");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "commandPermissions");
-				}
-			}
-
-			foreach (FieldDefinition fd in mainModule.GetType ("World").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fdType.FullName.Equals ("System.UInt64")) {
-					Console.WriteLine ("Renaming world field -> gameTime");
-					NameNormalizer.setName (fd, "gameTime");
-				}
-			}
-
-			foreach (FieldDefinition fd in mainModule.GetType ("GameManager").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fdType.FullName.Equals ("ConnectionManager")) {
-					Console.WriteLine ("Renaming and making public GameMananger field -> connectionManager");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "connectionManager");
-				}
-			}
-
-			foreach (FieldDefinition fd in mainModule.GetType ("ConnectionManager").Fields) {
-				TypeReference fdType = fd.FieldType;
-				if (fdType.FullName.Equals ("GameManager")) {
-					Console.WriteLine ("Renaming and making public ConnectionManager field -> gameManager");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "gameManager");
-				}
-				if (fdType.FullName.Contains ("Dictionary") && fdType.FullName.Contains ("ClientInfo")) {
-					Console.WriteLine ("Renaming and making public ConnectionManager field -> connectedClients");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "connectedClients");
-				}
-				if (fdType.FullName.Contains ("Dictionary") && fdType.FullName.Contains ("System.Int32,System.Int32")) {
-					Console.WriteLine ("Renaming and making public ConnectionManager field -> mapClientToEntity");
-					fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-					NameNormalizer.setName (fd, "mapClientToEntity");
-				}
-			}
-
-			string consoleTypeName = string.Empty;
-			TypeDefinition typeTelnetServer = mainModule.GetType ("NetTelnetServer");
-			foreach (FieldDefinition fd in typeTelnetServer.Fields) {
-				if (NameNormalizer.makeValidName (fd.FieldType.Name) != null) {
-					Console.WriteLine ("Renaming console class -> ConsoleSdtd");
-					consoleTypeName = fd.FieldType.Name;
-					NameNormalizer.setName (fd.FieldType.Resolve (), "ConsoleSdtd");
-					NameNormalizer.setName (fd, "console");
-				}
-			}
-
-			if (consoleTypeName.Length > 0) {
-				TypeDefinition typeConsole = mainModule.GetType (consoleTypeName);
-				string consoleCommandTypeName = string.Empty;
-				foreach (MethodDefinition md in typeConsole.Methods) {
-					if (!md.IsConstructor) {
-						if (md.Parameters.Count == 3 && md.Parameters [0].ParameterType.Name.Equals ("NetworkPlayer")) {
-							Console.WriteLine ("Renaming console method -> ExecuteCmdFromClient");
-							NameNormalizer.setName (md, "ExecuteCmdFromClient");
-						}
-					}
-				}
-				foreach (FieldDefinition fd in typeConsole.Fields) {
-					TypeReference fdType = fd.FieldType;
-					if (fdType.FullName.Contains ("Generic.List")) {
-						if (fdType.IsGenericInstance) {
-							GenericInstanceType genType = (GenericInstanceType)fdType;
-							TypeReference genRef = genType.GenericArguments [0];
-							if (genRef.Name.Length < 2) {
-								Console.WriteLine ("Renaming console command class -> ConsoleCommand");
-								NameNormalizer.setName (genRef.Resolve (), "ConsoleCommand");
-								NameNormalizer.setName (fd, "commands");
-								consoleCommandTypeName = genRef.Name;
-							}
-						}
-					}
-					if (fdType.FullName.Equals ("GameManager")) {
-						Console.WriteLine ("Renaming and making public console field -> gameManager");
-						fd.Attributes = fd.Attributes & (~Mono.Cecil.FieldAttributes.Private) | Mono.Cecil.FieldAttributes.Public;
-						NameNormalizer.setName (fd, "gameManager");
-					}
-				}
-
-				if (consoleCommandTypeName.Length > 0) {
-					foreach (MethodDefinition md in typeConsole.Methods) {
-						if (!md.IsConstructor) {
-							if (md.Parameters.Count == 1 && md.Parameters [0].ParameterType.Name.Equals (consoleCommandTypeName)) {
-								Console.WriteLine ("Renaming console method -> AddCommand");
-								NameNormalizer.setName (md, "AddCommand");
-							}
-							if (md.Parameters.Count == 1 && md.Parameters [0].ParameterType.FullName.Equals ("System.String") && md.ReturnType.FullName.Equals (consoleCommandTypeName)) {
-								Console.WriteLine ("Renaming console method -> getCommand");
-								NameNormalizer.setName (md, "getCommand");
-							}
-						}
-					}
-
-					TypeDefinition typeConsoleCommand = mainModule.GetType (consoleCommandTypeName);
-					foreach (MethodDefinition md in typeConsoleCommand.Methods) {
-						if (!md.IsConstructor) {
-							if (md.Parameters.Count == 1 && md.Parameters [0].ParameterType.Name.Equals (consoleTypeName)) {
-								Console.WriteLine ("Renaming console command method -> Help");
-								NameNormalizer.setName (md, "Help");
-							}
-							if (md.Parameters.Count == 0 && md.ReturnType.Name.Equals ("Int32")) {
-								Console.WriteLine ("Renaming console command method -> Timeout");
-								NameNormalizer.setName (md, "Timeout");
-							}
-							if (md.Parameters.Count == 0 && md.ReturnType.Name.Equals ("String[]")) {
-								Console.WriteLine ("Renaming console command method -> Names");
-								NameNormalizer.setName (md, "Names");
-							}
-							if (md.Parameters.Count == 0 && md.ReturnType.Name.Equals ("String")) {
-								Console.WriteLine ("Renaming console command method -> Description");
-								NameNormalizer.setName (md, "Description");
-							}
-							if (md.Parameters.Count == 1 && md.Parameters [0].ParameterType.IsArray) {
-								Console.WriteLine ("Renaming console command method -> Run");
-								NameNormalizer.setName (md, "Run");
-							}
-						}
-					}
-				}
-			}
-		}
-
 		static void Main (string[] args)
 		{
-			Console.WriteLine ("NamePatcher for 7dtd's Assembly-CSharp.dll [by DerPopo, modified by Alloc] for Dedi build 320404");
+			Console.WriteLine ("NamePatcher for 7dtd's Assembly-CSharp.dll [by DerPopo, modified by Alloc]");
 			if (!TryArgs (args)) {
 				DrawUsage ();
@@ -247,5 +85,5 @@
 
 
-			applyManualPatches (input.MainModule);
+			ManualPatches.applyManualPatches (input.MainModule);
 
 
Index: binary-improvements/NamePatcher/NamePatcher.csproj
===================================================================
--- binary-improvements/NamePatcher/NamePatcher.csproj	(revision 104)
+++ binary-improvements/NamePatcher/NamePatcher.csproj	(revision 107)
@@ -44,4 +44,5 @@
     <Compile Include="NamePatcher.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ManualPatches.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: binary-improvements/NamePatcher/NamePatcher.userprefs
===================================================================
--- binary-improvements/NamePatcher/NamePatcher.userprefs	(revision 104)
+++ binary-improvements/NamePatcher/NamePatcher.userprefs	(revision 107)
@@ -1,8 +1,9 @@
 ﻿<Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release|x86" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="NamePatcher.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="ManualPatches.cs">
     <Files>
-      <File FileName="NamePatcher.cs" Line="64" Column="92" />
+      <File FileName="NamePatcher.cs" Line="5" Column="1" />
       <File FileName="NameNormalizer.cs" Line="188" Column="1" />
+      <File FileName="ManualPatches.cs" Line="120" Column="1" />
     </Files>
     <Pads>
@@ -11,5 +12,5 @@
           <Node name="NamePatcher" expanded="True">
             <Node name="Properties" expanded="True" />
-            <Node name="NamePatcher.cs" selected="True" />
+            <Node name="ManualPatches.cs" selected="True" />
           </Node>
         </State>
