Index: binary-improvements/7dtd-server-fixes/src/CustomCommands/ListLandProtection.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/CustomCommands/ListLandProtection.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/CustomCommands/ListLandProtection.cs	(revision 202)
@@ -20,4 +20,20 @@
 		}
 
+		public override void ExecuteRemote (string _sender, string[] _params)
+		{
+			try {
+				if (_params.Length >= 1 && _params [0].ToLower ().Equals ("nearby")) {
+					string[] params2 = new string[_params.Length + 1];
+					for (int i = 0; i < _params.Length; i++)
+						params2 [i] = _params [i];
+					params2 [_params.Length] = _sender;
+					_params = params2;
+				}
+				Run (_params);
+			} catch (Exception e) {
+				Log.Out ("Error in ListLandProtection.ExecuteRemote: " + e);
+			}
+		}
+
 		public override void Run (string[] _params)
 		{
@@ -28,4 +44,7 @@
 				bool summaryOnly = false;
 				string steamIdFilter = string.Empty;
+				Vector3i closeTo = default(Vector3i);
+				bool onlyCloseToPlayer = false;
+				int closeToDistance = 32;
 
 				if (_params.Length == 1) {
@@ -45,4 +64,24 @@
 						}
 					}
+				} else if (_params.Length >= 2) {
+					if (_params [0].ToLower ().Equals ("nearby")) {
+						try {
+							if (_params.Length == 3) {
+								if (!int.TryParse (_params[1], out closeToDistance)) {
+									m_Console.SendResult ("Given radius is not an integer!");
+								}
+							}
+							ClientInfo ci = CommonMappingFunctions.GetClientInfoFromSteamID (_params [_params.Length - 1]);
+							EntityPlayer ep = CommonMappingFunctions.GetEntityPlayer (ci);
+							closeTo = new Vector3i (ep.GetPosition ());
+							onlyCloseToPlayer = true;
+						} catch (Exception e) {
+							m_Console.SendResult ("Error getting current player's position");
+							Log.Out ("Error in ListLandProtection.Run: " + e);
+						}
+					} else {
+						m_Console.SendResult ("Illegal parameter list");
+						return;
+					}
 				}
 
@@ -51,13 +90,15 @@
 					Dictionary<PersistentPlayerData, List<Vector3i>> owners = new Dictionary<PersistentPlayerData, List<Vector3i>> ();
 					foreach (KeyValuePair<Vector3i, PersistentPlayerData> kvp in d) {
-						if (!owners.ContainsKey (kvp.Value)) {
-							owners.Add (kvp.Value, new List<Vector3i> ());
+						if (!onlyCloseToPlayer || (Math.Abs (kvp.Key.x - closeTo.x) <= closeToDistance && Math.Abs (kvp.Key.z - closeTo.z) <= closeToDistance)) {
+							if (!owners.ContainsKey (kvp.Value)) {
+								owners.Add (kvp.Value, new List<Vector3i> ());
+							}
+							owners [kvp.Value].Add (kvp.Key);
 						}
-						owners [kvp.Value].Add (kvp.Key);
 					}
 
 					foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
 						if (steamIdFilter.Length == 0 || kvp.Key.PlayerId.Equals (steamIdFilter)) {
-							string name = PersistentData.PersistentContainer.Instance.Players[kvp.Key.PlayerId].Name;
+							string name = PersistentData.PersistentContainer.Instance.Players [kvp.Key.PlayerId].Name;
 							name += " (" + kvp.Key.PlayerId + ")";
 
Index: binary-improvements/7dtd-server-fixes/src/CustomCommands/RemoveLandProtection.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/CustomCommands/RemoveLandProtection.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/CustomCommands/RemoveLandProtection.cs	(revision 202)
@@ -41,5 +41,8 @@
 				CommonMappingFunctions.GetGameManager ().SetBlocksRPC (changes);
 
-				m_Console.SendResult ("#" + changes.Count + " Land protection blocks for player \"" + _id + "\" removed");
+				m_Console.SendResult ("Tried to remove #" + changes.Count + " land protection blocks for player \"" + _id + "\". Note "+
+				                      "that only blocks in chunks that are currently loaded (close to any player) could be removed. "+
+				                      "Please check for remaining blocks by running:");
+				m_Console.SendResult("  listlandprotection " + _id);
 			} catch (Exception e) {
 				Log.Out ("Error in RemoveLandProtection.removeById: " + e);
Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs	(revision 202)
@@ -59,4 +59,5 @@
 		{
 			toClientQueue.Enqueue ("*** Connected with 7DTD server.");
+			toClientQueue.Enqueue ("*** Server version: " + GamePrefs.GetString(EnumGamePrefs.GameVersion));
 			toClientQueue.Enqueue ("*** Dedicated server only build");
 			toClientQueue.Enqueue ("*** Allocs server fixes loaded");
Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs	(revision 202)
@@ -24,20 +24,16 @@
 		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user)
 		{
-			try {
-				string fn = req.Url.AbsolutePath.Remove (0, staticPart.Length);
+			string fn = req.Url.AbsolutePath.Remove (0, staticPart.Length);
 
-				byte[] content = cache.GetFileContent (datapath + "/" + fn);
-				if (content != null) {
-					resp.ContentType = MimeType.GetMimeType (Path.GetExtension (fn));
-					resp.ContentLength64 = content.Length;
-					resp.OutputStream.Write (content, 0, content.Length);
-				} else {
-					resp.StatusCode = (int)HttpStatusCode.NotFound;
-					if (logMissingFiles)
-						Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + req.Url.AbsolutePath.Remove (0, staticPart.Length) + "\"");
-					return;
-				}
-			} catch (Exception e) {
-				Log.Out ("Error in StaticHandler.HandleRequest: " + e);
+			byte[] content = cache.GetFileContent (datapath + "/" + fn);
+			if (content != null) {
+				resp.ContentType = MimeType.GetMimeType (Path.GetExtension (fn));
+				resp.ContentLength64 = content.Length;
+				resp.OutputStream.Write (content, 0, content.Length);
+			} else {
+				resp.StatusCode = (int)HttpStatusCode.NotFound;
+				if (logMissingFiles)
+					Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + req.Url.AbsolutePath.Remove (0, staticPart.Length) + "\"");
+				return;
 			}
 		}
Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs	(revision 202)
@@ -3,4 +3,5 @@
 using System.IO;
 using System.Net;
+using System.Net.Sockets;
 using System.Text;
 using System.Threading;
@@ -15,4 +16,6 @@
 		private bool authEnabled = false;
 		private string realm = "7dtd Admin Panel";
+		public static int handlingCount = 0;
+		public static int currentHandlers = 0;
 
 		public Web ()
@@ -62,21 +65,7 @@
 				_listener.Realm = realm;
 
-				ThreadPool.QueueUserWorkItem ((o) =>
-				{
-					try {
-						while (_listener.IsListening) {
-							ThreadPool.QueueUserWorkItem ((c) =>
-							{
-								HttpListenerContext ctx = c as HttpListenerContext;
-								HandleRequest (ctx);
-							}, _listener.GetContext ());
-						}
-					} catch {
-					}
-				}
-				);
-
 				NetTelnetServer.RegisterServer (this);
 
+				_listener.BeginGetContext (new AsyncCallback (HandleRequest), _listener);
 
 				Log.Out ("Started Webserver on " + (webPort + 2) + " (authentication " + (authEnabled ? "enabled" : "disabled") + ")");
@@ -86,40 +75,51 @@
 		}
 
-		private void HandleRequest (HttpListenerContext ctx)
+		private void HandleRequest (IAsyncResult result)
 		{
-			try {
-				ctx.Response.ProtocolVersion = new Version ("1.1");
+			if (_listener.IsListening) {
+				Interlocked.Increment(ref handlingCount);
+				Interlocked.Increment(ref currentHandlers);
+				HttpListenerContext ctx = _listener.EndGetContext (result);
+				_listener.BeginGetContext (new AsyncCallback (HandleRequest), _listener);
+				try {
+					ctx.Response.ProtocolVersion = new Version ("1.1");
 
-				HttpListenerBasicIdentity user = Authorize (ctx);
+					HttpListenerBasicIdentity user = Authorize (ctx);
 
-				if (!authEnabled || (user.Name.ToLower ().Equals ("admin") && user.Password.Equals (GamePrefs.GetString (EnumGamePrefs.ControlPanelPassword)))) {
-					if (ctx.Request.Url.AbsolutePath.Length < 2) {
-						handlers ["/index.htm"].HandleRequest (ctx.Request, ctx.Response, user);
-						return;
-					} else {
-						foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
-							if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
-								kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
-								return;
+					if (!authEnabled || (user.Name.ToLower ().Equals ("admin") && user.Password.Equals (GamePrefs.GetString (EnumGamePrefs.ControlPanelPassword)))) {
+						if (ctx.Request.Url.AbsolutePath.Length < 2) {
+							handlers ["/index.htm"].HandleRequest (ctx.Request, ctx.Response, user);
+							return;
+						} else {
+							foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
+								if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
+									kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
+									return;
+								}
 							}
 						}
+
+						Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
+						ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
+					} else {
+						ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
+						ctx.Response.Headers ["WWW-Authenticate"] = "Basic realm=\"" + realm + "\"";
 					}
-
-					Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
-					ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
-				} else {
-					ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
-					ctx.Response.Headers ["WWW-Authenticate"] = "Basic realm=\"" + realm + "\"";
+				} catch (IOException e) {
+					if (e.InnerException is SocketException) {
+						if (e.InnerException.Message.Contains ("forcibly closed") || e.InnerException.Message.Contains ("socket has been shut down"))
+							Log.Out ("Error in Web.HandleRequest(): Remote host closed connection");
+						else
+							Log.Out ("Error (IO->Socket) in Web.HandleRequest(): " + e);
+					} else {
+						Log.Out ("Error (IO) in Web.HandleRequest(): " + e);
+					}
+				} catch (Exception e) {
+					Log.Out ("Error in Web.HandleRequest(): " + e);
+				} finally {
+					if (ctx != null)
+						ctx.Response.OutputStream.Close ();
+					Interlocked.Decrement(ref currentHandlers);
 				}
-
-//				byte[] buf = Encoding.UTF8.GetBytes ("Hello World");
-//				resp.ContentLength64 = buf.Length;
-//				resp.ContentType = "text/html";
-//				resp.ContentEncoding = Encoding.UTF8;
-//				resp.OutputStream.Write (buf, 0, buf.Length);
-			} catch (Exception e) {
-				Log.Out ("Error in Web.HandleRequest(): " + e);
-			} finally {
-				ctx.Response.Close ();
 			}
 		}
Index: binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs	(revision 199)
+++ binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs	(revision 202)
@@ -47,7 +47,7 @@
 		public Player GetPlayerByNameOrId (string _nameOrId, bool _ignoreColorCodes)
 		{
-			string sid = GetSteamID(_nameOrId, _ignoreColorCodes);
+			string sid = GetSteamID (_nameOrId, _ignoreColorCodes);
 			if (sid != null)
-				return this[sid];
+				return this [sid];
 			else
 				return null;
