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.");
+		}
+	}
+}
+
