Index: binary-improvements/MapRendering/Web/API/GetLandClaims.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 326)
+++ binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 332)
@@ -21,5 +21,5 @@
 
 			// default user, cheap way to avoid 'null reference exception'
-			user = user ?? new WebConnection ("", "", 0L);
+			user = user ?? new WebConnection ("", IPAddress.None, 0L);
 
 			bool bViewAll = WebConnection.CanViewAllClaims (permissionLevel);
Index: binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs	(revision 326)
+++ binary-improvements/MapRendering/Web/API/GetPlayerInventories.cs	(revision 332)
@@ -1,2 +1,3 @@
+using System.Collections.Generic;
 using System.Net;
 using AllocsFixes.JSON;
@@ -9,6 +10,6 @@
 			JSONArray AllInventoriesResult = new JSONArray ();
 
-			foreach (string sid in PersistentContainer.Instance.Players.SteamIDs) {
-				Player p = PersistentContainer.Instance.Players [sid, false];
+			foreach (KeyValuePair<string, Player> kvp in PersistentContainer.Instance.Players.Dict) {
+				Player p = kvp.Value;
 
 				if (p == null) {
@@ -23,5 +24,5 @@
 					JSONArray belt = new JSONArray ();
 					JSONObject equipment = new JSONObject ();
-					result.Add ("steamid", new JSONString (sid));
+					result.Add ("steamid", new JSONString (kvp.Key));
 					result.Add ("entityid", new JSONNumber (p.EntityID));
 					result.Add ("playername", new JSONString (p.Name));
Index: binary-improvements/MapRendering/Web/API/GetPlayerList.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayerList.cs	(revision 326)
+++ binary-improvements/MapRendering/Web/API/GetPlayerList.cs	(revision 332)
@@ -6,4 +6,5 @@
 using AllocsFixes.JSON;
 using AllocsFixes.PersistentData;
+using UnityEngine.Profiling;
 
 namespace AllocsFixes.NetConnections.Servers.Web.API {
@@ -12,8 +13,12 @@
 			new Regex (@"^(>=|=>|>|<=|=<|<|==|=)?\s*([0-9]+(\.[0-9]*)?)$");
 
+#if ENABLE_PROFILER
+		private static readonly CustomSampler jsonSerializeSampler = CustomSampler.Create ("JSON_Build");
+#endif
+
 		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, WebConnection user,
 			int permissionLevel) {
 			AdminTools admTools = GameManager.Instance.adminTools;
-			user = user ?? new WebConnection ("", "", 0L);
+			user = user ?? new WebConnection ("", IPAddress.None, 0L);
 
 			bool bViewAll = WebConnection.CanViewAllPlayers (permissionLevel);
@@ -35,11 +40,16 @@
 			Players playersList = PersistentContainer.Instance.Players;
 
+			
 			List<JSONObject> playerList = new List<JSONObject> ();
 
-			foreach (string sid in playersList.SteamIDs) {
-				Player p = playersList [sid, false];
+#if ENABLE_PROFILER
+			jsonSerializeSampler.Begin ();
+#endif
+
+			foreach (KeyValuePair<string, Player> kvp in playersList.Dict) {
+				Player p = kvp.Value;
 
 				ulong player_steam_ID;
-				if (!ulong.TryParse (sid, out player_steam_ID)) {
+				if (!ulong.TryParse (kvp.Key, out player_steam_ID)) {
 					player_steam_ID = 0L;
 				}
@@ -52,5 +62,5 @@
 
 					JSONObject pJson = new JSONObject ();
-					pJson.Add ("steamid", new JSONString (sid));
+					pJson.Add ("steamid", new JSONString (kvp.Key));
 					pJson.Add ("entityid", new JSONNumber (p.EntityID));
 					pJson.Add ("ip", new JSONString (p.IP));
@@ -66,5 +76,5 @@
 					JSONBoolean banned;
 					if (admTools != null) {
-						banned = new JSONBoolean (admTools.IsBanned (sid));
+						banned = new JSONBoolean (admTools.IsBanned (kvp.Key));
 					} else {
 						banned = new JSONBoolean (false);
@@ -76,4 +86,8 @@
 				}
 			}
+
+#if ENABLE_PROFILER
+			jsonSerializeSampler.End ();
+#endif
 
 			IEnumerable<JSONObject> list = playerList;
Index: binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs	(revision 326)
+++ binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs	(revision 332)
@@ -1,2 +1,3 @@
+using System.Collections.Generic;
 using System.Net;
 using AllocsFixes.JSON;
@@ -8,5 +9,5 @@
 			int permissionLevel) {
 			AdminTools admTools = GameManager.Instance.adminTools;
-			user = user ?? new WebConnection ("", "", 0L);
+			user = user ?? new WebConnection ("", IPAddress.None, 0L);
 
 			bool listOffline = false;
@@ -21,16 +22,16 @@
 			Players playersList = PersistentContainer.Instance.Players;
 
-			foreach (string sid in playersList.SteamIDs) {
+			foreach (KeyValuePair<string, Player> kvp in playersList.Dict) {
 				if (admTools != null) {
-					if (admTools.IsBanned (sid)) {
+					if (admTools.IsBanned (kvp.Key)) {
 						continue;
 					}
 				}
 
-				Player p = playersList [sid, false];
+				Player p = kvp.Value;
 
 				if (listOffline || p.IsOnline) {
 					ulong player_steam_ID;
-					if (!ulong.TryParse (sid, out player_steam_ID)) {
+					if (!ulong.TryParse (kvp.Key, out player_steam_ID)) {
 						player_steam_ID = 0L;
 					}
@@ -43,5 +44,5 @@
 
 						JSONObject pJson = new JSONObject ();
-						pJson.Add ("steamid", new JSONString (sid));
+						pJson.Add ("steamid", new JSONString (kvp.Key));
 
 						//					pJson.Add("entityid", new JSONNumber (p.EntityID));
Index: binary-improvements/MapRendering/Web/API/WebAPI.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/WebAPI.cs	(revision 326)
+++ binary-improvements/MapRendering/Web/API/WebAPI.cs	(revision 332)
@@ -2,4 +2,5 @@
 using System.Text;
 using AllocsFixes.JSON;
+using UnityEngine.Profiling;
 
 namespace AllocsFixes.NetConnections.Servers.Web.API {
@@ -11,7 +12,19 @@
 		}
 
+#if ENABLE_PROFILER
+		private static readonly CustomSampler jsonSerializeSampler = CustomSampler.Create ("JSON_Serialize");
+		private static readonly CustomSampler netWriteSampler = 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;
@@ -19,4 +32,7 @@
 			resp.ContentEncoding = Encoding.UTF8;
 			resp.OutputStream.Write (buf, 0, buf.Length);
+#if ENABLE_PROFILER
+			netWriteSampler.End ();
+#endif
 		}
 
