Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetGamePrefs.cs	(revision 103)
@@ -45,30 +45,34 @@
 	public override void Run (string[] _params)
 	{
-		EnumGamePrefs enumGamePrefs = EnumGamePrefs.Last;
+		try {
+			EnumGamePrefs enumGamePrefs = EnumGamePrefs.Last;
 
-		if (_params.Length > 0) {
-			try {
-				enumGamePrefs = (EnumGamePrefs)((int)Enum.Parse (typeof(EnumGamePrefs), _params [0]));
-			} catch (Exception) {
+			if (_params.Length > 0) {
+				try {
+					enumGamePrefs = (EnumGamePrefs)((int)Enum.Parse (typeof(EnumGamePrefs), _params [0]));
+				} catch (Exception) {
+				}
 			}
-		}
 
-		if (enumGamePrefs == EnumGamePrefs.Last) {
-			SortedList<string, string> sortedList = new SortedList<string, string> ();
-			foreach (EnumGamePrefs gp in Enum.GetValues(typeof(EnumGamePrefs))) {
-				if ((_params.Length == 0) || (gp.ToString ().ToLower ().Contains (_params [0].ToLower ()))) {
-					if (prefAccessAllowed (gp)) {
-						sortedList.Add (gp.ToString (), string.Format ("{0} = {1}", gp.ToString (), GamePrefs.GetObject (gp)));
+			if (enumGamePrefs == EnumGamePrefs.Last) {
+				SortedList<string, string> sortedList = new SortedList<string, string> ();
+				foreach (EnumGamePrefs gp in Enum.GetValues(typeof(EnumGamePrefs))) {
+					if ((_params.Length == 0) || (gp.ToString ().ToLower ().Contains (_params [0].ToLower ()))) {
+						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]);
+				}
+			} else {
+				if (prefAccessAllowed (enumGamePrefs))
+					m_Console.md000a (string.Format ("{0} = {1}", enumGamePrefs, GamePrefs.GetObject (enumGamePrefs)));
+				else
+					m_Console.md000a ("Access to requested preference is forbidden");
 			}
-			foreach (string s in sortedList.Keys) {
-				m_Console.md000a (sortedList [s]);
-			}
-		} else {
-			if (prefAccessAllowed (enumGamePrefs))
-				m_Console.md000a (string.Format ("{0} = {1}", enumGamePrefs, GamePrefs.GetObject (enumGamePrefs)));
-			else
-				m_Console.md000a ("Access to requested preference is forbidden");
+		} catch (Exception e) {
+			Log.Out ("Error in GetGamePrefs.Run: " + e);
 		}
 	}
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetTime.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetTime.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/GetTime.cs	(revision 103)
@@ -19,13 +19,17 @@
 	public override void Run (string[] _params)
 	{
-		ulong time = this.m_Console.gameManager.World.gameTime;
-		int day = (int)(time / 24000) + 1;
-		int hour = (int)(time % 24000) / 1000 + 8;
-		if (hour > 23) {
-			day++;
-			hour -= 24;
+		try {
+			ulong time = this.m_Console.gameManager.World.gameTime;
+			int day = (int)(time / 24000) + 1;
+			int hour = (int)(time % 24000) / 1000 + 8;
+			if (hour > 23) {
+				day++;
+				hour -= 24;
+			}
+			int min = (int)(time % 1000) * 60 / 1000;
+			m_Console.md000a (String.Format ("Day {0}, {1:00}:{2:00} ", day, hour, min));
+		} catch (Exception e) {
+			Log.Out ("Error in GetTime.Run: " + e);
 		}
-		int min = (int)(time % 1000) * 60 / 1000;
-		m_Console.md000a (String.Format ("Day {0}, {1:00}:{2:00} ", day, hour, min));
 	}
 }
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/ListPlayersExtended.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/ListPlayersExtended.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/ListPlayersExtended.cs	(revision 103)
@@ -4,5 +4,6 @@
 public class ListPlayersExtended : ConsoleCommand
 {
-	public ListPlayersExtended(ConsoleSdtd cons) : base(cons) {
+	public ListPlayersExtended (ConsoleSdtd cons) : base(cons)
+	{
 	}
 
@@ -12,5 +13,6 @@
 	}
 
-	public override string[] Names () {
+	public override string[] Names ()
+	{
 		return new string[] { "listplayersextended", "lpe" };
 	}
@@ -18,20 +20,14 @@
 	public override void Run (string[] _params)
 	{
-		World w = this.m_Console.gameManager.World;
-		int num = 0;
-		foreach (KeyValuePair<int, EntityPlayer> current in w.playerEntities.dict)
-		{
-			int clientId = -1;
-			Dictionary<int,int> d = this.m_Console.gameManager.connectionManager.mapClientToEntity;
-			foreach (KeyValuePair<int, int> mapping in d) {
-				if (mapping.Value == current.Value.fd0087) {
-					clientId = mapping.Key;
+		try {
+			World w = CommonMappingFunctions.GetGameManager ().World;
+			int num = 0;
+			foreach (KeyValuePair<int, EntityPlayer> current in w.playerEntities.dict) {
+				ClientInfo ci = CommonMappingFunctions.GetClientInfoFromEntityID (current.Key);
+				string ip = string.Empty;
+				if (ci != null) {
+					ip = ci.networkPlayer.ipAddress;
 				}
-			}
-			string ip = string.Empty;
-			if (clientId >= 0) {
-				ip = this.m_Console.gameManager.connectionManager.connectedClients [clientId].networkPlayer.ipAddress;
-			}
-			m_Console.md000a (string.Concat (new object[]
+				m_Console.md000a (string.Concat (new object[]
 			{
 				string.Empty,
@@ -58,12 +54,17 @@
 				current.Value.Score,
 				", steamid=",
-				SingletonMonoBehaviour<Authenticator>.Instance.GetPlayerId (current.Value.EntityName),
+				CommonMappingFunctions.GetSteamID (ci),
 				", ip=",
 				ip,
 				", ping=",
 				current.Value.pingToServer
-			}));
+			}
+				)
+				);
+			}
+			m_Console.md000a ("Total of " + w.playerEntities.list.Count + " in the game");
+		} catch (Exception e) {
+			Log.Out ("Error in ListPlayersExtended.Run: " + e);
 		}
-		m_Console.md000a ("Total of " + w.playerEntities.list.Count + " in the game");
 	}
 }
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/SayToPlayer.cs	(revision 103)
@@ -4,9 +4,6 @@
 public class SayToPlayer : ConsoleCommand
 {
-	private GameManager manager;
-
 	public SayToPlayer (ConsoleSdtd cons) : base(cons)
 	{
-		manager = m_Console.gameManager;
 	}
 
@@ -18,8 +15,16 @@
 	public override string[] Names ()
 	{
-		return new string[] { "sayplayer", string.Empty };
+		return new string[] { "sayplayer", "pm" };
 	}
 
-	public override void Run (string[] _params)
+	private void SendMessage (ClientInfo _receiver, string _sender, string _message)
+	{
+		CommonMappingFunctions.GetConnectionManager ().networkView.RPC ("RPC_ChatMessage", _receiver.networkPlayer,
+				new object[] { _message, -1, _sender + " (PM)", true	});
+		string receiverName = CommonMappingFunctions.GetPlayerName (_receiver);
+		m_Console.md000a ("Message to player " + (receiverName != null ? "\"" + receiverName + "\"" : "unknownName") + " sent with sender \"" + _sender + "\"");
+	}
+
+	private void RunInternal (string _sender, string[] _params)
 	{
 		if (_params.Length < 2) {
@@ -33,45 +38,32 @@
 		}
 
-		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;
-					}
-				}
+		ClientInfo ci = CommonMappingFunctions.GetClientInfoFromNameOrID (_params [0]);
+		if (ci != null) {
+			SendMessage (ci, _sender, message);
+		} else {
+			m_Console.md000a ("Playername or entity ID not found.");
+		}
+	}
+
+	public override void ExecuteRemote (string _sender, string[] _params)
+	{
+		try {
+			this.m_Console.md000a (string.Format ("{0} executing remote command '{1}' {2}", _sender, this.Names () [0], string.Join (" ", _params)));
+			ClientInfo ci = CommonMappingFunctions.GetClientInfoFromSteamID (_sender);
+			if (ci != null) {
+				_sender = CommonMappingFunctions.GetPlayerName (ci);
 			}
-			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.");
+			RunInternal (_sender, _params);
+		} catch (Exception e) {
+			Log.Out ("Error in SayToPlayer.ExecuteRemote: " + e);
+		}
+	}
+
+	public override void Run (string[] _params)
+	{
+		try {
+			RunInternal ("Server", _params);
+		} catch (Exception e) {
+			Log.Out ("Error in SayToPlayer.Run: " + e);
 		}
 	}
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/SetTimeReal.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/SetTimeReal.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/SetTimeReal.cs	(revision 103)
@@ -19,42 +19,46 @@
 	public override void Run (string[] _params)
 	{
-		if (_params.Length != 3) {
-			m_Console.md000a ("Usage: settimereal <day> <hour> <min>");
-			return;
+		try {
+			if (_params.Length != 3) {
+				m_Console.md000a ("Usage: settimereal <day> <hour> <min>");
+				return;
+			}
+
+			int day, hour, min;
+			if (!int.TryParse (_params [0], out day)) {
+				m_Console.md000a ("Could not parse day number \"" + _params [0] + "\"");
+				return;
+			}
+			if (day < 1) {
+				m_Console.md000a ("Day must be >= 1");
+				return;
+			}
+			if (!int.TryParse (_params [1], out hour)) {
+				m_Console.md000a ("Could not parse hour \"" + _params [1] + "\"");
+				return;
+			}
+			if (hour > 23) {
+				m_Console.md000a ("Hour must be <= 23");
+				return;
+			}
+			if (!int.TryParse (_params [2], out min)) {
+				m_Console.md000a ("Could not parse minute \"" + _params [2] + "\"");
+				return;
+			}
+			if (min > 59) {
+				m_Console.md000a ("Minute must be <= 59");
+				return;
+			}
+			if ((day < 1) || (hour < 8 && day < 1)) {
+				m_Console.md000a ("Time may not be prior to day 1, 8:00");
+				return;
+			}
+
+			ulong time = ((ulong)(day - 1) * 24000) + ((ulong)hour * 1000) + ((ulong)min * 1000 / 60) - 8000;
+			m_Console.gameManager.World.gameTime = time;
+			m_Console.md000a (String.Format ("Set time to Day {0}, {1:00}:{2:00} = {3}", day, hour, min, time));
+		} catch (Exception e) {
+			Log.Out ("Error in SetTimeReal.Run: " + e);
 		}
-
-		int day, hour, min;
-		if (!int.TryParse (_params [0], out day)) {
-			m_Console.md000a ("Could not parse day number \"" + _params [0] + "\"");
-			return;
-		}
-		if (day < 1) {
-			m_Console.md000a ("Day must be >= 1");
-			return;
-		}
-		if (!int.TryParse (_params [1], out hour)) {
-			m_Console.md000a ("Could not parse hour \"" + _params [1] + "\"");
-			return;
-		}
-		if (hour > 23) {
-			m_Console.md000a ("Hour must be <= 23");
-			return;
-		}
-		if (!int.TryParse (_params [2], out min)) {
-			m_Console.md000a ("Could not parse minute \"" + _params [2] + "\"");
-			return;
-		}
-		if (min > 59) {
-			m_Console.md000a ("Minute must be <= 59");
-			return;
-		}
-		if ((day < 1) || (hour < 8 && day < 1)) {
-			m_Console.md000a ("Time may not be prior to day 1, 8:00");
-			return;
-		}
-
-		ulong time = ((ulong)(day-1) * 24000) + ((ulong)hour * 1000) + ((ulong)min * 1000 / 60) - 8000;
-		this.m_Console.gameManager.World.gameTime = time;
-		m_Console.md000a (String.Format ("Set time to Day {0}, {1:00}:{2:00} = {3}", day, hour, min, time));
 	}
 }
Index: binary-improvements/7dtd-server-fixes/src/TelnetCommands/ShowInventory.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/TelnetCommands/ShowInventory.cs	(revision 93)
+++ binary-improvements/7dtd-server-fixes/src/TelnetCommands/ShowInventory.cs	(revision 103)
@@ -23,41 +23,45 @@
 	public override void Run (string[] _params)
 	{
-		if (_params.Length < 1) {
-			m_Console.md000a ("Usage: showinventory <playername|entityid>");
-			return;
-		}
+		try {
+			if (_params.Length < 1) {
+				m_Console.md000a ("Usage: showinventory <playername|entityid>");
+				return;
+			}
 
-		int entityId = -1;
-		PlayerDataStuff.PlayerItems items = null;
-		if (int.TryParse (_params [0], out entityId)) {
-			items = PlayerDataStuff.GetPlayerItems (entityId);
-		}
+			int entityId = -1;
+			PlayerDataStuff.PlayerItems items = null;
+			if (int.TryParse (_params [0], out entityId)) {
+				items = PlayerDataStuff.GetPlayerItems (entityId);
+			}
 
-		if (items == null) {
-			string playerName = _params [0].ToLower ();
-			foreach (KeyValuePair<int, EntityPlayer> kvp in manager.World.playerEntities.dict) {
-				if (kvp.Value.EntityName.ToLower ().Equals (playerName)) {
-					entityId = kvp.Key;
-					break;
+			if (items == null) {
+				string playerName = _params [0].ToLower ();
+				foreach (KeyValuePair<int, EntityPlayer> kvp in manager.World.playerEntities.dict) {
+					if (kvp.Value.EntityName.ToLower ().Equals (playerName)) {
+						entityId = kvp.Key;
+						break;
+					}
 				}
 			}
+			items = PlayerDataStuff.GetPlayerItems (entityId);
+
+			if (items == null) {
+				m_Console.md000a ("Playername or entity id not found or no inventory saved (first saved after a player has been online for 30s).");
+				return;
+			}
+
+			m_Console.md000a ("Belt of player:");
+			foreach (KeyValuePair<string, int> kvp in items.belt) {
+				m_Console.md000a (string.Format ("    {0:000} * {1}", kvp.Value, kvp.Key));
+			}
+			m_Console.md000a (string.Empty);
+			m_Console.md000a ("Bagpack of player:");
+			foreach (KeyValuePair<string, int> kvp in items.bag) {
+				m_Console.md000a (string.Format ("    {0:000} * {1}", kvp.Value, kvp.Key));
+			}
+			m_Console.md000a (string.Empty);
+		} catch (Exception e) {
+			Log.Out ("Error in ShowInventory.Run: " + e);
 		}
-		items = PlayerDataStuff.GetPlayerItems (entityId);
-
-		if (items == null) {
-			m_Console.md000a ("Playername or entity id not found or no inventory saved (first saved after a player has been online for 30s).");
-			return;
-		}
-
-		m_Console.md000a ("Belt of player:");
-		foreach (KeyValuePair<string, int> kvp in items.belt) {
-			m_Console.md000a (string.Format ("    {0:000} * {1}", kvp.Value, kvp.Key));
-		}
-		m_Console.md000a (string.Empty);
-		m_Console.md000a ("Bagpack of player:");
-		foreach (KeyValuePair<string, int> kvp in items.bag) {
-			m_Console.md000a (string.Format ("    {0:000} * {1}", kvp.Value, kvp.Key));
-		}
-		m_Console.md000a (string.Empty);
 	}
 }
