Index: binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj
===================================================================
--- binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 81)
+++ binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 83)
@@ -31,5 +31,8 @@
     <Reference Include="System" />
     <Reference Include="Assembly-CSharp">
-      <HintPath>..\assembly-patcher\bin\Release\Assembly-CSharp.dll</HintPath>
+      <HintPath>..\NamePatcher\bin\Release\Assembly-CSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="UnityEngine">
+      <HintPath>..\assembly-patcher\bin\Release\UnityEngine.dll</HintPath>
     </Reference>
   </ItemGroup>
@@ -39,7 +42,8 @@
     <Compile Include="src\AllocsTelnetConnection.cs" />
     <Compile Include="src\TelnetCommands\GetTime.cs" />
-    <Compile Include="src\AllocsRequestToSpawnPlayer.cs" />
     <Compile Include="src\TelnetCommands\ListPlayersExtended.cs" />
     <Compile Include="src\TelnetCommands\GetGamePrefs.cs" />
+    <Compile Include="src\TelnetCommands\SayToPlayer.cs" />
+    <Compile Include="src\AllocsLogFunctions.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 83)
+++ binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 83)
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AllocsLogFunctions
+{
+	public static void RequestToSpawnPlayer (GameManager manager, int _clientId, string _name, string _playerClassname, string _skinTexture, int _chunkViewDim)
+	{
+		string ip = manager.connectionManager.connectedClients [_clientId].networkPlayer.ipAddress;
+		string name = string.Empty;
+		int entityId = -1;
+		Dictionary<int,int> d = manager.connectionManager.mapClientToEntity;
+		if (d.ContainsKey (_clientId)) {
+			entityId = d [_clientId];
+			World w = manager.World;
+			name = w.playerEntities.dict [entityId].EntityName;
+		}
+
+		Log.Out ("Player connected, clientid=" + _clientId +
+			", entityid=" + entityId +
+			", name=" + name +
+			", steamid=" + SingletonMonoBehaviour<Authenticator>.Instance.GetPlayerId (name) +
+			", ip=" + ip
+		);
+	}
+
+	public static void ExecuteCmdFromClient (ConsoleSdtd console, NetworkPlayer _networkPlayer, string _playerID, string _command)
+	{
+		Log.Out ("Executed command \"" + _command + "\" from player \"" + _playerID + "\"");
+	}
+}
Index: binary-improvements/7dtd-server-fixes/src/AllocsNetTelnetServer.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/AllocsNetTelnetServer.cs	(revision 81)
+++ binary-improvements/7dtd-server-fixes/src/AllocsNetTelnetServer.cs	(revision 83)
@@ -136,4 +136,5 @@
 		console.AddCommand(new GetTime(console));
 		console.AddCommand(new ListPlayersExtended(console));
+		console.AddCommand(new SayToPlayer(console));
 	}
 
Index: binary-improvements/7dtd-server-fixes/src/AllocsRequestToSpawnPlayer.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/AllocsRequestToSpawnPlayer.cs	(revision 81)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using System;
-using System.Collections.Generic;
-
-public class AllocsRequestToSpawnPlayer
-{
-	public static void RequestToSpawnPlayer (GameManager manager, int _clientId, string _name, string _playerClassname, string _skinTexture, int _chunkViewDim)
-	{
-		string ip = manager.connectionManager.connectedClients [_clientId].networkPlayer.ipAddress;
-		string name = string.Empty;
-		int entityId = -1;
-		Dictionary<int,int> d = manager.connectionManager.mapClientToEntity;
-		if (d.ContainsKey (_clientId)) {
-			entityId = d [_clientId];
-			World w = manager.World;
-			name = w.playerEntities.dict [entityId].EntityName;
-		}
-
-		Log.Out ("Player connected, clientid=" + _clientId +
-		         ", entityid=" + entityId +
-		         ", name=" + name +
-		         ", steamid=" + SingletonMonoBehaviour<Authenticator>.Instance.GetPlayerId (name) +
-		         ", ip=" + ip);
-	}
-}
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs	(revision 83)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs	(revision 83)
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+
+public class GetGamePrefs : ConsoleCommand
+{
+	private string[] forbiddenPrefs = new string[] {
+			"telnet",
+			"adminfilename",
+			"controlpanel",
+			"password",
+			"savegamefolder",
+			"options",
+			"last"
+		};
+
+	private bool prefAccessAllowed (EnumGamePrefs gp)
+	{
+		string gpName = gp.ToString ().ToLower ();
+		foreach (string s in forbiddenPrefs) {
+			if (gpName.Contains (s)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public GetGamePrefs (ConsoleSdtd cons) : base(cons)
+	{
+	}
+
+	public override string Description ()
+	{
+		return "gets a game pref";
+	}
+
+	public override string[] Names ()
+	{
+		return new string[]
+		{
+			"getgamepref",
+			"gg"
+		};
+	}
+
+	public override void Run (string[] _params)
+	{
+		if (_params.Length <= 0) {
+			SortedList<string, string> sortedList = new SortedList<string, string> ();
+			foreach (EnumGamePrefs gp in Enum.GetValues(typeof(EnumGamePrefs))) {
+				if (prefAccessAllowed (gp))
+					sortedList.Add (gp.ToString (), string.Format ("{0} = {1}", gp.ToString (), GamePrefs.GetObject (gp)));
+			}
+			foreach (string s in sortedList.Keys) {
+				m_Console.md000a (sortedList [s]);
+			}
+			return;
+		}
+
+		EnumGamePrefs enumGamePrefs;
+		try {
+			enumGamePrefs = (EnumGamePrefs)((int)Enum.Parse (typeof(EnumGamePrefs), _params [0]));
+		} catch (Exception) {
+			m_Console.md000a ("Error parsing parameter: " + _params [0]);
+			return;
+		}
+
+		if (prefAccessAllowed (enumGamePrefs))
+			m_Console.md000a (string.Format ("{0} = {1}", enumGamePrefs, GamePrefs.GetObject (enumGamePrefs)));
+		else
+			m_Console.md000a ("Access to requested preference is forbidden");
+	}
+}
+
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs	(revision 83)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs	(revision 83)
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+
+public class SayToPlayer : ConsoleCommand
+{
+	private GameManager manager;
+
+	public SayToPlayer (ConsoleSdtd cons) : base(cons)
+	{
+		manager = m_Console.gameManager;
+	}
+
+	public override string Description ()
+	{
+		return "send a message to a single player";
+	}
+
+	public override string[] Names ()
+	{
+		return new string[] { "sayplayer", string.Empty };
+	}
+
+	public override void Run (string[] _params)
+	{
+		if (_params.Length < 2) {
+			m_Console.md000a ("Usage: sayplayer <playername|entityid> <message>");
+			return;
+		}
+
+		string message = _params [1];
+		for (int i = 2; i < _params.Length; i++) {
+			message += " " + _params [i];
+		}
+
+		int entityId = -1;
+		if (int.TryParse (_params [0], out entityId)) {
+			foreach (KeyValuePair<int, int> kvp in manager.connectionManager.mapClientToEntity) {
+				if (kvp.Value == entityId) {
+					int clientid = kvp.Key;
+					ClientInfo ci = manager.connectionManager.connectedClients[clientid];
+					if (ci != null) {
+						manager.connectionManager.networkView.RPC ("RPC_ChatMessage", ci.networkPlayer, new object[] {
+							message,
+							-1,
+							"Server (private)",
+							true
+							}
+						);
+						m_Console.md000a ("Message sent");
+						return;
+					}
+				}
+			}
+			m_Console.md000a ("Entity ID not found.");
+		} else {
+			string destPlayerName = _params [0].ToLower ();
+			foreach (ClientInfo ci in manager.connectionManager.connectedClients.Values) {
+				Dictionary<int,int> d = manager.connectionManager.mapClientToEntity;
+				if (d.ContainsKey (ci.clientId)) {
+					entityId = d [ci.clientId];
+					string curName = manager.World.playerEntities.dict [entityId].EntityName;
+					if (curName.ToLower ().Equals (destPlayerName)) {
+						manager.connectionManager.networkView.RPC ("RPC_ChatMessage", ci.networkPlayer, new object[] {
+							message,
+							-1,
+							"Server (private)",
+							true
+							}
+						);
+						m_Console.md000a ("Message sent");
+						return;
+					}
+				}
+			}
+			m_Console.md000a ("Playername not found.");
+		}
+	}
+}
+
