Index: binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs	(revision 448)
+++ 	(revision )
@@ -1,50 +1,0 @@
-using System;
-using System.Net;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class ExecuteConsoleCommand : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			if (string.IsNullOrEmpty (_req.QueryString ["command"])) {
-				_resp.StatusCode = (int) HttpStatusCode.BadRequest;
-				Web.SetResponseTextContent (_resp, "No command given");
-				return;
-			}
-
-			WebCommandResult.ResultType responseType =
-				_req.QueryString ["raw"] != null
-					? WebCommandResult.ResultType.Raw
-					: (_req.QueryString ["simple"] != null
-						? WebCommandResult.ResultType.ResultOnly
-						: WebCommandResult.ResultType.Full);
-
-			string commandline = _req.QueryString ["command"];
-			string commandPart = commandline.Split (' ') [0];
-			string argumentsPart = commandline.Substring (Math.Min (commandline.Length, commandPart.Length + 1));
-
-			IConsoleCommand command = SdtdConsole.Instance.GetCommand (commandline);
-
-			if (command == null) {
-				_resp.StatusCode = (int) HttpStatusCode.NotFound;
-				Web.SetResponseTextContent (_resp, "Unknown command");
-				return;
-			}
-
-			int commandPermissionLevel = GameManager.Instance.adminTools.Commands.GetCommandPermissionLevel (command.GetCommands ());
-
-			if (_permissionLevel > commandPermissionLevel) {
-				_resp.StatusCode = (int) HttpStatusCode.Forbidden;
-				Web.SetResponseTextContent (_resp, "You are not allowed to execute this command");
-				return;
-			}
-
-			_resp.SendChunked = true;
-			WebCommandResult wcr = new WebCommandResult (commandPart, argumentsPart, responseType, _resp);
-			SdtdConsole.Instance.ExecuteAsync (commandline, wcr);
-		}
-
-		public override int DefaultPermissionLevel () {
-			return 2000;
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetAllowedCommands.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetAllowedCommands.cs	(revision 448)
+++ 	(revision )
@@ -1,37 +1,0 @@
-using System.Net;
-using AllocsFixes.JSON;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetAllowedCommands : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONObject result = new JSONObject ();
-			JSONArray entries = new JSONArray ();
-			foreach (IConsoleCommand cc in SdtdConsole.Instance.GetCommands ()) {
-				int commandPermissionLevel = GameManager.Instance.adminTools.Commands.GetCommandPermissionLevel (cc.GetCommands ());
-				if (_permissionLevel <= commandPermissionLevel) {
-					string cmd = string.Empty;
-					foreach (string s in cc.GetCommands ()) {
-						if (s.Length > cmd.Length) {
-							cmd = s;
-						}
-					}
-
-					JSONObject cmdObj = new JSONObject ();
-					cmdObj.Add ("command", new JSONString (cmd));
-					cmdObj.Add ("description", new JSONString (cc.GetDescription ()));
-					cmdObj.Add ("help", new JSONString (cc.GetHelp ()));
-					entries.Add (cmdObj);
-				}
-			}
-
-			result.Add ("commands", entries);
-
-			WriteJSON (_resp, result);
-		}
-
-		public override int DefaultPermissionLevel () {
-			return 2000;
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetAnimalsLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetAnimalsLocation.cs	(revision 448)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.LiveData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	internal class GetAnimalsLocation : WebAPI {
-		private readonly List<EntityAnimal> animals = new List<EntityAnimal> ();
-
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONArray animalsJsResult = new JSONArray ();
-
-			Animals.Instance.Get (animals);
-			for (int i = 0; i < animals.Count; i++) {
-				EntityAnimal entity = animals [i];
-				Vector3i position = new Vector3i (entity.GetPosition ());
-
-				JSONObject jsonPOS = new JSONObject ();
-				jsonPOS.Add ("x", new JSONNumber (position.x));
-				jsonPOS.Add ("y", new JSONNumber (position.y));
-				jsonPOS.Add ("z", new JSONNumber (position.z));
-
-				JSONObject pJson = new JSONObject ();
-				pJson.Add ("id", new JSONNumber (entity.entityId));
-
-				if (!string.IsNullOrEmpty (entity.EntityName)) {
-					pJson.Add ("name", new JSONString (entity.EntityName));
-				} else {
-					pJson.Add ("name", new JSONString ("animal class #" + entity.entityClass));
-				}
-
-				pJson.Add ("position", jsonPOS);
-
-				animalsJsResult.Add (pJson);
-			}
-
-			WriteJSON (_resp, animalsJsResult);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetHostileLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetHostileLocation.cs	(revision 448)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.LiveData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	internal class GetHostileLocation : WebAPI {
-		private readonly List<EntityEnemy> enemies = new List<EntityEnemy> ();
-
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONArray hostilesJsResult = new JSONArray ();
-
-			Hostiles.Instance.Get (enemies);
-			for (int i = 0; i < enemies.Count; i++) {
-				EntityEnemy entity = enemies [i];
-				Vector3i position = new Vector3i (entity.GetPosition ());
-
-				JSONObject jsonPOS = new JSONObject ();
-				jsonPOS.Add ("x", new JSONNumber (position.x));
-				jsonPOS.Add ("y", new JSONNumber (position.y));
-				jsonPOS.Add ("z", new JSONNumber (position.z));
-
-				JSONObject pJson = new JSONObject ();
-				pJson.Add ("id", new JSONNumber (entity.entityId));
-
-				if (!string.IsNullOrEmpty (entity.EntityName)) {
-					pJson.Add ("name", new JSONString (entity.EntityName));
-				} else {
-					pJson.Add ("name", new JSONString ("enemy class #" + entity.entityClass));
-				}
-
-				pJson.Add ("position", jsonPOS);
-
-				hostilesJsResult.Add (pJson);
-			}
-
-			WriteJSON (_resp, hostilesJsResult);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetLandClaims.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 448)
+++ 	(revision )
@@ -1,78 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetLandClaims : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			PlatformUserIdentifierAbs requestedUserId = null;
-			if (_req.QueryString ["userid"] != null) {
-				if (!PlatformUserIdentifierAbs.TryFromCombinedString (_req.QueryString ["userid"], out requestedUserId)) {
-					_resp.StatusCode = (int) HttpStatusCode.BadRequest;
-					Web.SetResponseTextContent (_resp, "Invalid user id given");
-					return;
-				}
-			}
-
-			// default user, cheap way to avoid 'null reference exception'
-			PlatformUserIdentifierAbs userId = _user?.UserId;
-
-			bool bViewAll = WebConnection.CanViewAllClaims (_permissionLevel);
-
-			JSONObject result = new JSONObject ();
-			result.Add ("claimsize", new JSONNumber (GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> (nameof(EnumGamePrefs.LandClaimSize)))));
-
-			JSONArray claimOwners = new JSONArray ();
-			result.Add ("claimowners", claimOwners);
-
-			LandClaimList.OwnerFilter[] ownerFilters = null;
-			if (requestedUserId != null || !bViewAll) {
-				if (requestedUserId != null && !bViewAll) {
-					ownerFilters = new[] {
-						LandClaimList.UserIdFilter (userId),
-						LandClaimList.UserIdFilter (requestedUserId)
-					};
-				} else if (!bViewAll) {
-					ownerFilters = new[] {LandClaimList.UserIdFilter (userId)};
-				} else {
-					ownerFilters = new[] {LandClaimList.UserIdFilter (requestedUserId)};
-				}
-			}
-
-			LandClaimList.PositionFilter[] posFilters = null;
-
-			Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (ownerFilters, posFilters);
-
-			foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
-				JSONObject owner = new JSONObject ();
-				claimOwners.Add (owner);
-
-				owner.Add ("steamid", new JSONString (kvp.Key.PlatformId?.CombinedString ?? ""));
-				owner.Add ("crossplatformid", new JSONString (kvp.Key.CrossPlatformId?.CombinedString ?? ""));
-				owner.Add ("claimactive", new JSONBoolean (kvp.Key.LandProtectionActive));
-
-				if (kvp.Key.Name.Length > 0) {
-					owner.Add ("playername", new JSONString (kvp.Key.Name));
-				} else {
-					owner.Add ("playername", new JSONNull ());
-				}
-
-				JSONArray claimsJson = new JSONArray ();
-				owner.Add ("claims", claimsJson);
-
-				foreach (Vector3i v in kvp.Value) {
-					JSONObject claim = new JSONObject ();
-					claim.Add ("x", new JSONNumber (v.x));
-					claim.Add ("y", new JSONNumber (v.y));
-					claim.Add ("z", new JSONNumber (v.z));
-
-					claimsJson.Add (claim);
-				}
-			}
-
-			WriteJSON (_resp, result);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetLog.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetLog.cs	(revision 448)
+++ 	(revision )
@@ -1,60 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetLog : WebAPI {
-		private const int MAX_COUNT = 1000;
-		
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			int count, firstLine, lastLine;
-
-			if (_req.QueryString ["count"] == null || !int.TryParse (_req.QueryString ["count"], out count)) {
-				count = 50;
-			}
-
-			if (count == 0) {
-				count = 1;
-			}
-
-			if (count > MAX_COUNT) {
-				count = MAX_COUNT;
-			}
-
-			if (count < -MAX_COUNT) {
-				count = -MAX_COUNT;
-			}
-
-			if (_req.QueryString ["firstLine"] == null || !int.TryParse (_req.QueryString ["firstLine"], out firstLine)) {
-				if (count > 0) {
-					firstLine = LogBuffer.Instance.OldestLine;
-				} else {
-					firstLine = LogBuffer.Instance.LatestLine;
-				}
-			}
-
-			JSONObject result = new JSONObject ();
-
-			List<LogBuffer.LogEntry> logEntries = LogBuffer.Instance.GetRange (ref firstLine, count, out lastLine);
-
-			JSONArray entries = new JSONArray ();
-			foreach (LogBuffer.LogEntry logEntry in logEntries) {
-				JSONObject entry = new JSONObject ();
-				entry.Add ("date", new JSONString (logEntry.date));
-				entry.Add ("time", new JSONString (logEntry.time));
-				entry.Add ("uptime", new JSONString (logEntry.uptime));
-				entry.Add ("msg", new JSONString (logEntry.message));
-				entry.Add ("trace", new JSONString (logEntry.trace));
-				entry.Add ("type", new JSONString (logEntry.type.ToStringCached ()));
-				entries.Add (entry);
-			}
-
-			result.Add ("firstLine", new JSONNumber (firstLine));
-			result.Add ("lastLine", new JSONNumber (lastLine));
-			result.Add ("entries", entries);
-
-			WriteJSON (_resp, result);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs	(revision 448)
+++ 	(revision )
@@ -1,29 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetPlayerInventories : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			GetPlayerInventory.GetInventoryArguments (_req, out bool showIconColor, out bool showIconName);
-
-			JSONArray AllInventoriesResult = new JSONArray ();
-
-			foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in PersistentContainer.Instance.Players.Dict) {
-				Player p = kvp.Value;
-
-				if (p == null) {
-					continue;
-				}
-
-				if (p.IsOnline) {
-					AllInventoriesResult.Add (GetPlayerInventory.DoPlayer (p, showIconColor, showIconName));
-				}
-			}
-
-			WriteJSON (_resp, AllInventoriesResult);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs	(revision 448)
+++ 	(revision )
@@ -1,129 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetPlayerInventory : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			if (_req.QueryString ["userid"] == null) {
-				_resp.StatusCode = (int) HttpStatusCode.BadRequest;
-				Web.SetResponseTextContent (_resp, "No user id given");
-				return;
-			}
-
-			string userIdString = _req.QueryString ["userid"];
-			if (!PlatformUserIdentifierAbs.TryFromCombinedString (userIdString, out PlatformUserIdentifierAbs userId)) {
-				_resp.StatusCode = (int) HttpStatusCode.BadRequest;
-				Web.SetResponseTextContent (_resp, "Invalid user id given");
-				return;
-			}
-
-			Player p = PersistentContainer.Instance.Players.GetByUserId (userId);
-			if (p == null) {
-				_resp.StatusCode = (int) HttpStatusCode.NotFound;
-				Web.SetResponseTextContent (_resp, "Unknown user id given");
-				return;
-			}
-
-			GetInventoryArguments (_req, out bool showIconColor, out bool showIconName);
-
-			JSONObject result = DoPlayer (p, showIconColor, showIconName);
-
-			WriteJSON (_resp, result);
-		}
-
-		internal static void GetInventoryArguments (HttpListenerRequest _req, out bool _showIconColor, out bool _showIconName) {
-			if (_req.QueryString ["showiconcolor"] == null || !bool.TryParse (_req.QueryString ["showiconcolor"], out _showIconColor)) {
-				_showIconColor = true;
-			}
-			
-			if (_req.QueryString ["showiconname"] == null || !bool.TryParse (_req.QueryString ["showiconname"], out _showIconName)) {
-				_showIconName = true;
-			}
-		}
-
-		internal static JSONObject DoPlayer (Player _player, bool _showIconColor, bool _showIconName) {
-			PersistentData.Inventory inv = _player.Inventory;
-
-			JSONObject result = new JSONObject ();
-
-			JSONArray bag = new JSONArray ();
-			JSONArray belt = new JSONArray ();
-			JSONObject equipment = new JSONObject ();
-			result.Add ("userid", new JSONString (_player.PlatformId.CombinedString));
-			result.Add ("crossplatformid", new JSONString (_player.CrossPlatformId?.CombinedString ?? ""));
-			result.Add ("entityid", new JSONNumber (_player.EntityID));
-			result.Add ("playername", new JSONString (_player.Name));
-			result.Add ("bag", bag);
-			result.Add ("belt", belt);
-			result.Add ("equipment", equipment);
-
-			DoInventory (belt, inv.belt, _showIconColor, _showIconName);
-			DoInventory (bag, inv.bag, _showIconColor, _showIconName);
-
-			AddEquipment (equipment, "head", inv.equipment, EquipmentSlots.Headgear, _showIconColor, _showIconName);
-			AddEquipment (equipment, "eyes", inv.equipment, EquipmentSlots.Eyewear, _showIconColor, _showIconName);
-			AddEquipment (equipment, "face", inv.equipment, EquipmentSlots.Face, _showIconColor, _showIconName);
-
-			AddEquipment (equipment, "armor", inv.equipment, EquipmentSlots.ChestArmor, _showIconColor, _showIconName);
-			AddEquipment (equipment, "jacket", inv.equipment, EquipmentSlots.Jacket, _showIconColor, _showIconName);
-			AddEquipment (equipment, "shirt", inv.equipment, EquipmentSlots.Shirt, _showIconColor, _showIconName);
-
-			AddEquipment (equipment, "legarmor", inv.equipment, EquipmentSlots.LegArmor, _showIconColor, _showIconName);
-			AddEquipment (equipment, "pants", inv.equipment, EquipmentSlots.Legs, _showIconColor, _showIconName);
-			AddEquipment (equipment, "boots", inv.equipment, EquipmentSlots.Feet, _showIconColor, _showIconName);
-
-			AddEquipment (equipment, "gloves", inv.equipment, EquipmentSlots.Hands, _showIconColor, _showIconName);
-
-			return result;
-		}
-
-		private static void DoInventory (JSONArray _jsonRes, List<InvItem> _inv, bool _showIconColor, bool _showIconName) {
-			for (int i = 0; i < _inv.Count; i++) {
-				_jsonRes.Add (GetJsonForItem (_inv [i], _showIconColor, _showIconName));
-			}
-		}
-
-		private static void AddEquipment (JSONObject _eq, string _slotname, InvItem[] _items, EquipmentSlots _slot, bool _showIconColor, bool _showIconName) {
-			int[] slotindices = XUiM_PlayerEquipment.GetSlotIndicesByEquipmentSlot (_slot);
-
-			for (int i = 0; i < slotindices.Length; i++) {
-				if (_items? [slotindices [i]] != null) {
-					InvItem item = _items [slotindices [i]];
-					_eq.Add (_slotname, GetJsonForItem (item, _showIconColor, _showIconName));
-					return;
-				}
-			}
-
-			_eq.Add (_slotname, new JSONNull ());
-		}
-
-		private static JSONNode GetJsonForItem (InvItem _item, bool _showIconColor, bool _showIconName) {
-			if (_item == null) {
-				return new JSONNull ();
-			}
-
-			JSONObject jsonItem = new JSONObject ();
-			jsonItem.Add ("count", new JSONNumber (_item.count));
-			jsonItem.Add ("name", new JSONString (_item.itemName));
-			
-			if (_showIconName) {
-				jsonItem.Add ("icon", new JSONString (_item.icon));
-			}
-
-			if (_showIconColor) {
-				jsonItem.Add ("iconcolor", new JSONString (_item.iconcolor));
-			}
-
-			jsonItem.Add ("quality", new JSONNumber (_item.quality));
-			if (_item.quality >= 0) {
-				jsonItem.Add ("qualitycolor", new JSONString (QualityInfo.GetQualityColorHex (_item.quality)));
-			}
-
-			return jsonItem;
-
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetPlayerList.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerList.cs	(revision 448)
+++ 	(revision )
@@ -1,271 +1,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using System.Text.RegularExpressions;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetPlayerList : WebAPI {
-		private static readonly Regex numberFilterMatcher =
-			new Regex (@"^(>=|=>|>|<=|=<|<|==|=)?\s*([0-9]+(\.[0-9]*)?)$");
-
-#if ENABLE_PROFILER
-		private static readonly UnityEngine.Profiling.CustomSampler jsonSerializeSampler = UnityEngine.Profiling.CustomSampler.Create ("JSON_Build");
-#endif
-
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			AdminTools admTools = GameManager.Instance.adminTools;
-			PlatformUserIdentifierAbs userId = _user?.UserId;
-
-			bool bViewAll = WebConnection.CanViewAllPlayers (_permissionLevel);
-
-			// TODO: Sort (and filter?) prior to converting to JSON ... hard as how to get the correct column's data? (i.e. column name matches JSON object field names, not source data)
-
-			int rowsPerPage = 25;
-			if (_req.QueryString ["rowsperpage"] != null) {
-				int.TryParse (_req.QueryString ["rowsperpage"], out rowsPerPage);
-			}
-
-			int page = 0;
-			if (_req.QueryString ["page"] != null) {
-				int.TryParse (_req.QueryString ["page"], out page);
-			}
-
-			int firstEntry = page * rowsPerPage;
-
-			Players playersList = PersistentContainer.Instance.Players;
-
-			
-			List<JSONObject> playerList = new List<JSONObject> ();
-
-#if ENABLE_PROFILER
-			jsonSerializeSampler.Begin ();
-#endif
-
-			foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in playersList.Dict) {
-				Player p = kvp.Value;
-
-				if (bViewAll || p.InternalId.Equals (userId)) {
-					JSONObject pos = new JSONObject ();
-					pos.Add ("x", new JSONNumber (p.LastPosition.x));
-					pos.Add ("y", new JSONNumber (p.LastPosition.y));
-					pos.Add ("z", new JSONNumber (p.LastPosition.z));
-
-					JSONObject pJson = new JSONObject ();
-					pJson.Add ("steamid", new JSONString (kvp.Value.PlatformId.CombinedString));
-					pJson.Add ("crossplatformid", new JSONString (kvp.Value.CrossPlatformId?.CombinedString ?? ""));
-					pJson.Add ("entityid", new JSONNumber (p.EntityID));
-					pJson.Add ("ip", new JSONString (p.IP));
-					pJson.Add ("name", new JSONString (p.Name));
-					pJson.Add ("online", new JSONBoolean (p.IsOnline));
-					pJson.Add ("position", pos);
-
-					pJson.Add ("totalplaytime", new JSONNumber (p.TotalPlayTime));
-					pJson.Add ("lastonline",
-						new JSONString (p.LastOnline.ToUniversalTime ().ToString ("yyyy-MM-ddTHH:mm:ssZ")));
-					pJson.Add ("ping", new JSONNumber (p.IsOnline ? p.ClientInfo.ping : -1));
-
-					JSONBoolean banned = admTools != null ? new JSONBoolean (admTools.Blacklist.IsBanned (kvp.Key, out _, out _)) : new JSONBoolean (false);
-
-					pJson.Add ("banned", banned);
-
-					playerList.Add (pJson);
-				}
-			}
-
-#if ENABLE_PROFILER
-			jsonSerializeSampler.End ();
-#endif
-
-			IEnumerable<JSONObject> list = playerList;
-
-			foreach (string key in _req.QueryString.AllKeys) {
-				if (!string.IsNullOrEmpty (key) && key.StartsWith ("filter[")) {
-					string filterCol = key.Substring (key.IndexOf ('[') + 1);
-					filterCol = filterCol.Substring (0, filterCol.Length - 1);
-					string filterVal = _req.QueryString.Get (key).Trim ();
-
-					list = ExecuteFilter (list, filterCol, filterVal);
-				}
-			}
-
-			int totalAfterFilter = list.Count ();
-
-			foreach (string key in _req.QueryString.AllKeys) {
-				if (!string.IsNullOrEmpty (key) && key.StartsWith ("sort[")) {
-					string sortCol = key.Substring (key.IndexOf ('[') + 1);
-					sortCol = sortCol.Substring (0, sortCol.Length - 1);
-					string sortVal = _req.QueryString.Get (key);
-
-					list = ExecuteSort (list, sortCol, sortVal == "0");
-				}
-			}
-
-			list = list.Skip (firstEntry);
-			list = list.Take (rowsPerPage);
-
-
-			JSONArray playersJsResult = new JSONArray ();
-			foreach (JSONObject jsO in list) {
-				playersJsResult.Add (jsO);
-			}
-
-			JSONObject result = new JSONObject ();
-			result.Add ("total", new JSONNumber (totalAfterFilter));
-			result.Add ("totalUnfiltered", new JSONNumber (playerList.Count));
-			result.Add ("firstResult", new JSONNumber (firstEntry));
-			result.Add ("players", playersJsResult);
-
-			WriteJSON (_resp, result);
-		}
-
-		private IEnumerable<JSONObject> ExecuteFilter (IEnumerable<JSONObject> _list, string _filterCol,
-			string _filterVal) {
-			if (!_list.Any()) {
-				return _list;
-			}
-
-			if (_list.First ().ContainsKey (_filterCol)) {
-				Type colType = _list.First () [_filterCol].GetType ();
-				if (colType == typeof (JSONNumber)) {
-					return ExecuteNumberFilter (_list, _filterCol, _filterVal);
-				}
-
-				if (colType == typeof (JSONBoolean)) {
-					bool value = StringParsers.ParseBool (_filterVal);
-					return _list.Where (_line => ((JSONBoolean) _line [_filterCol]).GetBool () == value);
-				}
-
-				if (colType == typeof (JSONString)) {
-					// regex-match whole ^string$, replace * by .*, ? by .?, + by .+
-					_filterVal = _filterVal.Replace ("*", ".*").Replace ("?", ".?").Replace ("+", ".+");
-					_filterVal = "^" + _filterVal + "$";
-
-					//Log.Out ("GetPlayerList: Filter on String with Regex '" + _filterVal + "'");
-					Regex matcher = new Regex (_filterVal, RegexOptions.IgnoreCase);
-					return _list.Where (_line => matcher.IsMatch (((JSONString) _line [_filterCol]).GetString ()));
-				}
-			}
-
-			return _list;
-		}
-
-
-		private IEnumerable<JSONObject> ExecuteNumberFilter (IEnumerable<JSONObject> _list, string _filterCol,
-			string _filterVal) {
-			// allow value (exact match), =, ==, >=, >, <=, <
-			Match filterMatch = numberFilterMatcher.Match (_filterVal);
-			if (filterMatch.Success) {
-				double value = StringParsers.ParseDouble (filterMatch.Groups [2].Value);
-				NumberMatchType matchType;
-				double epsilon = value / 100000;
-				switch (filterMatch.Groups [1].Value) {
-					case "":
-					case "=":
-					case "==":
-						matchType = NumberMatchType.Equal;
-						break;
-					case ">":
-						matchType = NumberMatchType.Greater;
-						break;
-					case ">=":
-					case "=>":
-						matchType = NumberMatchType.GreaterEqual;
-						break;
-					case "<":
-						matchType = NumberMatchType.Lesser;
-						break;
-					case "<=":
-					case "=<":
-						matchType = NumberMatchType.LesserEqual;
-						break;
-					default:
-						matchType = NumberMatchType.Equal;
-						break;
-				}
-
-				return _list.Where (delegate (JSONObject _line) {
-					double objVal = ((JSONNumber) _line [_filterCol]).GetDouble ();
-					switch (matchType) {
-						case NumberMatchType.Greater:
-							return objVal > value;
-						case NumberMatchType.GreaterEqual:
-							return objVal >= value;
-						case NumberMatchType.Lesser:
-							return objVal < value;
-						case NumberMatchType.LesserEqual:
-							return objVal <= value;
-						case NumberMatchType.Equal:
-						default:
-							return NearlyEqual (objVal, value, epsilon);
-					}
-				});
-			}
-
-			Log.Out ("GetPlayerList: ignoring invalid filter for number-column '{0}': '{1}'", _filterCol, _filterVal);
-			return _list;
-		}
-
-
-		private IEnumerable<JSONObject> ExecuteSort (IEnumerable<JSONObject> _list, string _sortCol, bool _ascending) {
-			if (_list.Count () == 0) {
-				return _list;
-			}
-
-			if (_list.First ().ContainsKey (_sortCol)) {
-				Type colType = _list.First () [_sortCol].GetType ();
-				if (colType == typeof (JSONNumber)) {
-					if (_ascending) {
-						return _list.OrderBy (_line => ((JSONNumber) _line [_sortCol]).GetDouble ());
-					}
-
-					return _list.OrderByDescending (_line => ((JSONNumber) _line [_sortCol]).GetDouble ());
-				}
-
-				if (colType == typeof (JSONBoolean)) {
-					if (_ascending) {
-						return _list.OrderBy (_line => ((JSONBoolean) _line [_sortCol]).GetBool ());
-					}
-
-					return _list.OrderByDescending (_line => ((JSONBoolean) _line [_sortCol]).GetBool ());
-				}
-
-				if (_ascending) {
-					return _list.OrderBy (_line => _line [_sortCol].ToString ());
-				}
-
-				return _list.OrderByDescending (_line => _line [_sortCol].ToString ());
-			}
-
-			return _list;
-		}
-
-
-		private bool NearlyEqual (double _a, double _b, double _epsilon) {
-			double absA = Math.Abs (_a);
-			double absB = Math.Abs (_b);
-			double diff = Math.Abs (_a - _b);
-
-			if (_a == _b) {
-				return true;
-			}
-
-			if (_a == 0 || _b == 0 || diff < double.Epsilon) {
-				return diff < _epsilon;
-			}
-
-			return diff / (absA + absB) < _epsilon;
-		}
-
-		private enum NumberMatchType {
-			Equal,
-			Greater,
-			GreaterEqual,
-			Lesser,
-			LesserEqual
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs	(revision 448)
+++ 	(revision )
@@ -1,62 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetPlayersLocation : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			AdminTools admTools = GameManager.Instance.adminTools;
-			PlatformUserIdentifierAbs userId = _user?.UserId;
-
-			bool listOffline = false;
-			if (_req.QueryString ["offline"] != null) {
-				bool.TryParse (_req.QueryString ["offline"], out listOffline);
-			}
-
-			bool bViewAll = WebConnection.CanViewAllPlayers (_permissionLevel);
-
-			JSONArray playersJsResult = new JSONArray ();
-
-			Players playersList = PersistentContainer.Instance.Players;
-
-			foreach (KeyValuePair<PlatformUserIdentifierAbs, Player> kvp in playersList.Dict) {
-				if (admTools != null) {
-					if (admTools.Blacklist.IsBanned (kvp.Key, out _, out _)) {
-						continue;
-					}
-				}
-
-				Player p = kvp.Value;
-
-				if (listOffline || p.IsOnline) {
-					if (bViewAll || p.InternalId.Equals (userId)) {
-						JSONObject pos = new JSONObject ();
-						pos.Add ("x", new JSONNumber (p.LastPosition.x));
-						pos.Add ("y", new JSONNumber (p.LastPosition.y));
-						pos.Add ("z", new JSONNumber (p.LastPosition.z));
-
-						JSONObject pJson = new JSONObject ();
-						pJson.Add ("steamid", new JSONString (kvp.Value.PlatformId.CombinedString));
-						pJson.Add ("crossplatformid", new JSONString (kvp.Value.CrossPlatformId?.CombinedString ?? ""));
-
-						//					pJson.Add("entityid", new JSONNumber (p.EntityID));
-						//                    pJson.Add("ip", new JSONString (p.IP));
-						pJson.Add ("name", new JSONString (p.Name));
-						pJson.Add ("online", new JSONBoolean (p.IsOnline));
-						pJson.Add ("position", pos);
-
-						//					pJson.Add ("totalplaytime", new JSONNumber (p.TotalPlayTime));
-						//					pJson.Add ("lastonline", new JSONString (p.LastOnline.ToString ("s")));
-						//					pJson.Add ("ping", new JSONNumber (p.IsOnline ? p.ClientInfo.ping : -1));
-
-						playersJsResult.Add (pJson);
-					}
-				}
-			}
-
-			WriteJSON (_resp, playersJsResult);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetPlayersOnline.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayersOnline.cs	(revision 448)
+++ 	(revision )
@@ -1,49 +1,0 @@
-using System.Collections.Generic;
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.PersistentData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetPlayersOnline : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONArray players = new JSONArray ();
-
-			World w = GameManager.Instance.World;
-			foreach (KeyValuePair<int, EntityPlayer> current in w.Players.dict) {
-				ClientInfo ci = ConnectionManager.Instance.Clients.ForEntityId (current.Key);
-				Player player = PersistentContainer.Instance.Players.GetByInternalId (ci.InternalId);
-
-				JSONObject pos = new JSONObject ();
-				pos.Add ("x", new JSONNumber ((int) current.Value.GetPosition ().x));
-				pos.Add ("y", new JSONNumber ((int) current.Value.GetPosition ().y));
-				pos.Add ("z", new JSONNumber ((int) current.Value.GetPosition ().z));
-
-				JSONObject p = new JSONObject ();
-				p.Add ("steamid", new JSONString (ci.PlatformId.CombinedString));
-				p.Add ("crossplatformid", new JSONString (ci.CrossplatformId?.CombinedString ?? ""));
-				p.Add ("entityid", new JSONNumber (ci.entityId));
-				p.Add ("ip", new JSONString (ci.ip));
-				p.Add ("name", new JSONString (current.Value.EntityName));
-				p.Add ("online", new JSONBoolean (true));
-				p.Add ("position", pos);
-
-				p.Add ("level", new JSONNumber (player?.Level ?? -1));
-				p.Add ("health", new JSONNumber (current.Value.Health));
-				p.Add ("stamina", new JSONNumber (current.Value.Stamina));
-				p.Add ("zombiekills", new JSONNumber (current.Value.KilledZombies));
-				p.Add ("playerkills", new JSONNumber (current.Value.KilledPlayers));
-				p.Add ("playerdeaths", new JSONNumber (current.Value.Died));
-				p.Add ("score", new JSONNumber (current.Value.Score));
-
-				p.Add ("totalplaytime", new JSONNumber (player?.TotalPlayTime ?? -1));
-				p.Add ("lastonline", new JSONString (player != null ? player.LastOnline.ToString ("s") : string.Empty));
-				p.Add ("ping", new JSONNumber (ci.ping));
-
-				players.Add (p);
-			}
-
-			WriteJSON (_resp, players);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetServerInfo.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetServerInfo.cs	(revision 448)
+++ 	(revision )
@@ -1,47 +1,0 @@
-using System;
-using System.Net;
-using AllocsFixes.JSON;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetServerInfo : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONObject serverInfo = new JSONObject ();
-
-			GameServerInfo gsi = ConnectionManager.Instance.LocalServerInfo;
-
-			foreach (string stringGamePref in Enum.GetNames (typeof (GameInfoString))) {
-				string value = gsi.GetValue ((GameInfoString) Enum.Parse (typeof (GameInfoString), stringGamePref));
-
-				JSONObject singleStat = new JSONObject ();
-				singleStat.Add ("type", new JSONString ("string"));
-				singleStat.Add ("value", new JSONString (value));
-
-				serverInfo.Add (stringGamePref, singleStat);
-			}
-
-			foreach (string intGamePref in Enum.GetNames (typeof (GameInfoInt))) {
-				int value = gsi.GetValue ((GameInfoInt) Enum.Parse (typeof (GameInfoInt), intGamePref));
-
-				JSONObject singleStat = new JSONObject ();
-				singleStat.Add ("type", new JSONString ("int"));
-				singleStat.Add ("value", new JSONNumber (value));
-
-				serverInfo.Add (intGamePref, singleStat);
-			}
-
-			foreach (string boolGamePref in Enum.GetNames (typeof (GameInfoBool))) {
-				bool value = gsi.GetValue ((GameInfoBool) Enum.Parse (typeof (GameInfoBool), boolGamePref));
-
-				JSONObject singleStat = new JSONObject ();
-				singleStat.Add ("type", new JSONString ("bool"));
-				singleStat.Add ("value", new JSONBoolean (value));
-
-				serverInfo.Add (boolGamePref, singleStat);
-			}
-
-
-			WriteJSON (_resp, serverInfo);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetStats.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetStats.cs	(revision 448)
+++ 	(revision )
@@ -1,28 +1,0 @@
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.LiveData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetStats : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			JSONObject result = new JSONObject ();
-
-			JSONObject time = new JSONObject ();
-			time.Add ("days", new JSONNumber (GameUtils.WorldTimeToDays (GameManager.Instance.World.worldTime)));
-			time.Add ("hours", new JSONNumber (GameUtils.WorldTimeToHours (GameManager.Instance.World.worldTime)));
-			time.Add ("minutes", new JSONNumber (GameUtils.WorldTimeToMinutes (GameManager.Instance.World.worldTime)));
-			result.Add ("gametime", time);
-
-			result.Add ("players", new JSONNumber (GameManager.Instance.World.Players.Count));
-			result.Add ("hostiles", new JSONNumber (Hostiles.Instance.GetCount ()));
-			result.Add ("animals", new JSONNumber (Animals.Instance.GetCount ()));
-
-			WriteJSON (_resp, result);
-		}
-
-		public override int DefaultPermissionLevel () {
-			return 2000;
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/GetWebUIUpdates.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetWebUIUpdates.cs	(revision 448)
+++ 	(revision )
@@ -1,36 +1,0 @@
-using System.Net;
-using AllocsFixes.JSON;
-using AllocsFixes.LiveData;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class GetWebUIUpdates : WebAPI {
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			int latestLine;
-			if (_req.QueryString ["latestLine"] == null ||
-			    !int.TryParse (_req.QueryString ["latestLine"], out latestLine)) {
-				latestLine = 0;
-			}
-
-			JSONObject result = new JSONObject ();
-
-			JSONObject time = new JSONObject ();
-			time.Add ("days", new JSONNumber (GameUtils.WorldTimeToDays (GameManager.Instance.World.worldTime)));
-			time.Add ("hours", new JSONNumber (GameUtils.WorldTimeToHours (GameManager.Instance.World.worldTime)));
-			time.Add ("minutes", new JSONNumber (GameUtils.WorldTimeToMinutes (GameManager.Instance.World.worldTime)));
-			result.Add ("gametime", time);
-
-			result.Add ("players", new JSONNumber (GameManager.Instance.World.Players.Count));
-			result.Add ("hostiles", new JSONNumber (Hostiles.Instance.GetCount ()));
-			result.Add ("animals", new JSONNumber (Animals.Instance.GetCount ()));
-
-			result.Add ("newlogs", new JSONNumber (LogBuffer.Instance.LatestLine - latestLine));
-
-			WriteJSON (_resp, result);
-		}
-
-		public override int DefaultPermissionLevel () {
-			return 2000;
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/Null.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/Null.cs	(revision 448)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿using System.Net;
-using System.Text;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public class Null : WebAPI {
-		public Null (string _name) : base(_name) {
-		}
-		
-		public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel) {
-			_resp.ContentLength64 = 0;
-			_resp.ContentType = "text/plain";
-			_resp.ContentEncoding = Encoding.ASCII;
-			_resp.OutputStream.Write (new byte[] { }, 0, 0);
-		}
-	}
-}
Index: binary-improvements/MapRendering/Web/API/WebAPI.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/WebAPI.cs	(revision 448)
+++ 	(revision )
@@ -1,53 +1,0 @@
-using System.Net;
-using System.Text;
-using AllocsFixes.JSON;
-
-namespace AllocsFixes.NetConnections.Servers.Web.API {
-	public abstract class WebAPI {
-		public readonly string Name;
-
-		protected WebAPI (string _name = null) {
-			Name = _name ?? GetType ().Name;
-		}
-
-#if ENABLE_PROFILER
-		private static readonly UnityEngine.Profiling.CustomSampler jsonSerializeSampler = UnityEngine.Profiling.CustomSampler.Create ("JSON_Serialize");
-		private static readonly UnityEngine.Profiling.CustomSampler netWriteSampler = UnityEngine.Profiling.CustomSampler.Create ("JSON_Write");
-#endif
-
-		public static void WriteJSON (HttpListenerResponse _resp, JSONNode _root) {
-#if ENABLE_PROFILER
-			jsonSerializeSampler.Begin ();
-#endif
-			StringBuilder sb = new StringBuilder ();
-			_root.ToString (sb);
-#if ENABLE_PROFILER
-			jsonSerializeSampler.End ();
-			netWriteSampler.Begin ();
-#endif
-			byte[] buf = Encoding.UTF8.GetBytes (sb.ToString ());
-			_resp.ContentLength64 = buf.Length;
-			_resp.ContentType = "application/json";
-			_resp.ContentEncoding = Encoding.UTF8;
-			_resp.OutputStream.Write (buf, 0, buf.Length);
-#if ENABLE_PROFILER
-			netWriteSampler.End ();
-#endif
-		}
-
-		public static void WriteText (HttpListenerResponse _resp, string _text) {
-			byte[] buf = Encoding.UTF8.GetBytes (_text);
-			_resp.ContentLength64 = buf.Length;
-			_resp.ContentType = "text/plain";
-			_resp.ContentEncoding = Encoding.UTF8;
-			_resp.OutputStream.Write (buf, 0, buf.Length);
-		}
-
-		public abstract void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
-			int _permissionLevel);
-
-		public virtual int DefaultPermissionLevel () {
-			return 0;
-		}
-	}
-}
