Index: binary-improvements/MapRendering/API/GetLandClaims.cs
===================================================================
--- binary-improvements/MapRendering/API/GetLandClaims.cs	(revision 454)
+++ binary-improvements/MapRendering/API/GetLandClaims.cs	(revision 455)
@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using System.Net;
-using AllocsFixes.JSON;
 using AllocsFixes.PersistentData;
+using JetBrains.Annotations;
+using Utf8Json;
 using Webserver;
 using Webserver.Permissions;
@@ -8,5 +9,15 @@
 
 namespace AllocsFixes.WebAPIs {
+	[UsedImplicitly]
 	public class GetLandClaims : AbsWebAPI {
+		private static readonly byte[] jsonKeyClaimSize = JsonWriter.GetEncodedPropertyNameWithBeginObject ("claimsize");
+		private static readonly byte[] jsonKeyClaimOwners = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claimowners");
+
+		private static readonly byte[] jsonKeySteamId = JsonWriter.GetEncodedPropertyNameWithBeginObject ("steamid");
+		private static readonly byte[] jsonKeyCrossPlatformId = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("crossplatformid");
+		private static readonly byte[] jsonKeyClaimActive = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claimactive");
+		private static readonly byte[] jsonKeyPlayerName = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("playername");
+		private static readonly byte[] jsonKeyClaims = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claims");
+
 		public override void HandleRequest (RequestContext _context) {
 			PlatformUserIdentifierAbs requestedUserId = null;
@@ -23,10 +34,4 @@
 			bool bViewAll = PermissionUtils.CanViewAllClaims (_context.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) {
@@ -34,5 +39,5 @@
 					ownerFilters = new[] {
 						LandClaimList.UserIdFilter (userId),
-						LandClaimList.UserIdFilter (requestedUserId)
+						LandClaimList.UserIdFilter (requestedUserId),
 					};
 				} else if (!bViewAll) {
@@ -47,32 +52,61 @@
 			Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (ownerFilters, posFilters);
 
+			JsonWriter writer = new JsonWriter ();
+			
+			writer.WriteRaw (jsonKeyClaimSize);
+			writer.WriteInt32 (GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> (nameof(EnumGamePrefs.LandClaimSize))));
+			
+			writer.WriteRaw (jsonKeyClaimOwners);
+			writer.WriteBeginArray ();
+			
+			bool first = true;
+
 			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 ());
+				if (!first) {
+					writer.WriteValueSeparator ();
 				}
 
-				JSONArray claimsJson = new JSONArray ();
-				owner.Add ("claims", claimsJson);
+				first = false;
+				
+				writer.WriteRaw (jsonKeySteamId);
+				writer.WriteString (kvp.Key.PlatformId?.CombinedString ?? "");
+				
+				writer.WriteRaw (jsonKeyCrossPlatformId);
+				writer.WriteString (kvp.Key.CrossPlatformId?.CombinedString ?? "");
+				
+				writer.WriteRaw (jsonKeyClaimActive);
+				writer.WriteBoolean (kvp.Key.LandProtectionActive);
+				
+				writer.WriteRaw (jsonKeyPlayerName);
+				if (kvp.Key.Name.Length > 0) {
+					writer.WriteString (kvp.Key.Name);
+				} else {
+					writer.WriteNull ();
+				}
+				
+				writer.WriteRaw (jsonKeyClaims);
+				writer.WriteBeginArray ();
+
+				bool first2 = true;
 
 				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));
+					if (!first2) {
+						writer.WriteValueSeparator ();
+					}
 
-					claimsJson.Add (claim);
+					first2 = false;
+					
+					JsonCommons.WriteVector3I (ref writer, v);
 				}
+				
+				writer.WriteEndArray ();
+				
+				writer.WriteEndObject ();
 			}
 
-			LegacyApiHelper.WriteJSON (_context.Response, result);
+			writer.WriteEndArray ();
+			
+			writer.WriteEndObject ();
+			WebUtils.WriteJsonData (_context.Response, ref writer);
 		}
 	}
