Index: /binary-improvements/7dtd-binaries/README.txt
===================================================================
--- /binary-improvements/7dtd-binaries/README.txt	(revision 237)
+++ /binary-improvements/7dtd-binaries/README.txt	(revision 238)
@@ -1,5 +1,3 @@
-Put the Assembly-CSharp.deobf.dll renamed to Assembly-CSharp.dll (output of
-the Deobfuscator [1]), Assembly-CSharp-firstpass.dll, LogLibrary.dll, mscorlib.dll,
-System.dll and UnityEngine.dll in this folder.
+Put the Assembly-CSharp.dll, Assembly-CSharp-firstpass.dll, LogLibrary.dll, mscorlib.dll,
+System.dll and UnityEngine.dll from your dedicated server in this folder.
 
-[1]: https://github.com/DerPopo/deobfuscate-7dtd
Index: /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj
===================================================================
--- /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 238)
@@ -85,4 +85,5 @@
     <Compile Include="src\FileCache\MapTileCache.cs" />
     <Compile Include="src\API.cs" />
+    <Compile Include="src\ChatHookExample.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /binary-improvements/7dtd-server-fixes/ModInfo.xml
===================================================================
--- /binary-improvements/7dtd-server-fixes/ModInfo.xml	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/ModInfo.xml	(revision 238)
@@ -5,5 +5,5 @@
 		<Description value="Common functions" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="2" />
+		<Version value="4" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/7dtd-server-fixes/src/API.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/API.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/API.cs	(revision 238)
@@ -28,4 +28,7 @@
 		}
 
+		public override bool ChatMessage (ClientInfo _cInfo, string _message, string _playerName) {
+			return ChatHookExample.Hook (_cInfo, _message, _playerName);
+		}
 	}
 }
Index: /binary-improvements/7dtd-server-fixes/src/AssemblyInfo.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/AssemblyInfo.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/AssemblyInfo.cs	(revision 238)
@@ -18,5 +18,5 @@
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
 
-[assembly: AssemblyVersion("0.11.6.0")]
+[assembly: AssemblyVersion("0.12.0.0")]
 
 // The following attributes are used to specify the signing key for the assembly, 
Index: /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs	(revision 238)
+++ /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs	(revision 238)
@@ -0,0 +1,30 @@
+using System;
+
+namespace AllocsFixes
+{
+	public class ChatHookExample {
+		private const string BBFILTER = "[ffffffff][/url][/b][/i][/u][/s][/sub][/sup][ff]";
+		private const string ANSWER = "     [ff0000]I[-] [ff7f00]W[-][ffff00]A[-][80ff00]S[-] [00ffff]H[-][0080ff]E[-][0000ff]R[-][8b00ff]E[-]";
+
+		public static bool Hook (ClientInfo _cInfo, string _message, string _playerName) {
+			if (!string.IsNullOrEmpty (_message)) {
+				if (_message.EndsWith (BBFILTER + BBFILTER)) {
+					_message = _message.Remove (_message.Length - 2 * BBFILTER.Length);
+				}
+
+				if (_message.ToLower () == "/alloc") {
+					if (_cInfo != null) {
+						Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
+						_cInfo.SendPackage (new NetPackageGameMessage (ANSWER, ""));
+					} else {
+						Log.Error ("Argument _cInfo null on message: {0}", _message);
+					}
+					return false;
+				}
+			}
+
+			return true;
+		}
+
+	}
+}
Index: /binary-improvements/7dtd-server-fixes/src/ItemList.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/ItemList.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/ItemList.cs	(revision 238)
@@ -45,6 +45,6 @@
 		{
 			NGuiInvGridCreativeMenu cm = new NGuiInvGridCreativeMenu ();
-			foreach (InventoryField invF in cm.GetAllItems()) {
-				ItemBase ib = ItemBase.list [invF.itemValue.type];
+			foreach (ItemStack invF in cm.GetAllItems()) {
+				ItemClass ib = ItemClass.list [invF.itemValue.type];
 				string name = ib.GetItemName ();
 				if (name != null && name.Length > 0) {
@@ -56,6 +56,6 @@
 				}
 			}
-			foreach (InventoryField invF in cm.GetAllBlocks()) {
-				ItemBase ib = ItemBase.list [invF.itemValue.type];
+			foreach (ItemStack invF in cm.GetAllBlocks()) {
+				ItemClass ib = ItemClass.list [invF.itemValue.type];
 				string name = ib.GetItemName ();
 				if (name != null && name.Length > 0) {
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs	(revision 238)
@@ -25,5 +25,5 @@
 		}
 
-		private void ProcessInv (List<InvItem> target, InventoryField[] sourceFields, int id)
+		private void ProcessInv (List<InvItem> target, ItemStack[] sourceFields, int id)
 		{
 			lock (target) {
@@ -32,6 +32,6 @@
 					if (sourceFields [i].count > 0) {
 						int count = sourceFields [i].count;
-						int maxAllowed = ItemBase.list [sourceFields [i].itemValue.type].Stacknumber.Value;
-						string name = ItemBase.list [sourceFields [i].itemValue.type].GetItemName ();
+						int maxAllowed = ItemClass.list [sourceFields [i].itemValue.type].Stacknumber.Value;
+						string name = ItemClass.list [sourceFields [i].itemValue.type].GetItemName ();
 
 						if (count > maxAllowed)
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs	(revision 238)
@@ -36,5 +36,5 @@
 		public void Save ()
 		{
-			Stream stream = File.Open (StaticDirectories.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Create);
+			Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Create);
 			BinaryFormatter bFormatter = new BinaryFormatter ();
 			bFormatter.Serialize (stream, this);
@@ -44,8 +44,8 @@
 		public static bool Load ()
 		{
-			if (File.Exists (StaticDirectories.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
+			if (File.Exists (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
 				try {
 					PersistentContainer obj;
-					Stream stream = File.Open (StaticDirectories.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
+					Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
 					BinaryFormatter bFormatter = new BinaryFormatter ();
 					obj = (PersistentContainer)bFormatter.Deserialize (stream);
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 237)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 238)
@@ -135,4 +135,5 @@
 			name = ci.playerName;
 			ip = ci.ip;
+			lastOnline = DateTime.Now;
 		}
 
Index: /binary-improvements/AllocsCommands/AllocsCommands.csproj
===================================================================
--- /binary-improvements/AllocsCommands/AllocsCommands.csproj	(revision 237)
+++ /binary-improvements/AllocsCommands/AllocsCommands.csproj	(revision 238)
@@ -52,5 +52,5 @@
     <Compile Include="Chat.cs" />
     <Compile Include="Commands\ListItems.cs" />
-    <Compile Include="Commands\GenerateItemIcons.cs" />
+    <Compile Include="Commands\ExportItemIcons.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /binary-improvements/AllocsCommands/Chat.cs
===================================================================
--- /binary-improvements/AllocsCommands/Chat.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Chat.cs	(revision 238)
@@ -13,5 +13,5 @@
 				senderName = "Server";
 			}
-			_receiver.SendPackage (new NetPackage_GameInfoMessage (_message, senderName + " (PM)"));
+			_receiver.SendPackage (new NetPackageGameMessage (_message, senderName + " (PM)"));
 			string receiverName = _receiver.playerName;
 			SdtdConsole.Instance.Output ("Message to player " + (receiverName != null ? "\"" + receiverName + "\"" : "unknownName") + " sent with sender \"" + senderName + "\"");
Index: /binary-improvements/AllocsCommands/Commands/ExportItemIcons.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ExportItemIcons.cs	(revision 238)
+++ /binary-improvements/AllocsCommands/Commands/ExportItemIcons.cs	(revision 238)
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using UnityEngine;
+
+namespace AllocsFixes.CustomCommands
+{
+	public class ExportItemIcons : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "Exports all ItemIcons";
+		}
+
+		public override string GetHelp () {
+			return "Exports all ItemIcons currently in the game to the folder \"ItemIcons\" in the game root";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "exportitemicons" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
+			string exportPath = Utils.GetGameDir ("ItemIcons");
+
+			GameObject atlasObj = GameObject.Find ("/NGUI Root (2D)/ItemIconAtlas");
+			if (atlasObj == null) {
+				SdtdConsole.Instance.Output ("Atlas object not found");
+				return;
+			}
+			DynamicUIAtlas atlas = atlasObj.GetComponent<DynamicUIAtlas> ();
+			if (atlas == null) {
+				SdtdConsole.Instance.Output ("Atlas component not found");
+				return;
+			}
+
+			Texture2D atlasTex = atlas.texture as Texture2D;
+
+			if (Directory.Exists (exportPath)) {
+				SdtdConsole.Instance.Output ("Export path (" + exportPath + ") already exists");
+				return;
+			}
+			Directory.CreateDirectory (exportPath);
+
+			foreach (UISpriteData data in atlas.spriteList) {
+				string name = data.name;
+				Texture2D tex = new Texture2D (data.width, data.height, TextureFormat.ARGB32, false);
+				tex.SetPixels (atlasTex.GetPixels (data.x, atlasTex.height - data.height - data.y, data.width, data.height));
+				byte[] pixData = tex.EncodeToPNG ();
+				File.WriteAllBytes (exportPath + "/" + name + ".png", pixData);
+
+				UnityEngine.Object.Destroy (tex);
+			}
+
+		}
+	}
+}
Index: /binary-improvements/AllocsCommands/Commands/Give.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/Give.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/Give.cs	(revision 238)
@@ -12,4 +12,13 @@
 		}
 
+		public override string GetHelp () {
+			return "Give an item to a player by dropping it in front of that player\n" +
+				   "Usage:\n" +
+				   "   give <name / entity id> <item name> <amount>\n" +
+				   "Either pass the full name of a player or his entity id (given by e.g. \"lpi\").\n" +
+				   "Item name has to be the exact name of an item as listed by \"listitems\".\n" +
+				   "Amount is the number of instances of this item to drop (as a single stack).";
+		}
+
 		public override string[] GetCommands ()
 		{
@@ -21,5 +30,5 @@
 			try {
 				if (_params.Count != 3) {
-					SdtdConsole.Instance.Output ("Usage: give <playername|entityid> <itemname> <amount>");
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 3, found " + _params.Count + ".");
 					return;
 				}
@@ -46,5 +55,5 @@
 				EntityPlayer p = GameManager.Instance.World.Players.dict [ci.entityId];
 
-				InventoryField invField = new InventoryField (iv, n);
+				ItemStack invField = new ItemStack (iv, n);
 
 				GameManager.Instance.ItemDropServer (invField, p.GetPosition (), Vector3.zero, -1, 50);
Index: /binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs	(revision 238)
@@ -9,5 +9,17 @@
 		public override string GetDescription ()
 		{
-			return "lists all players that were ever online (optionally filtered)";
+			return "lists all players that were ever online";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "  1. listknownplayers\n" +
+				   "  2. listknownplayers -online\n" +
+				   "  3. listknownplayers -notbanned\n" +
+				   "  4. listknownplayers <player name>\n" +
+				   "1. Lists all players that have ever been online\n" +
+				   "2. Lists only the players that are currently online\n" +
+				   "3. Lists only the players that are not banned\n" +
+					"4. Lists all players whose name contains the given string";
 		}
 
Index: /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 238)
@@ -9,4 +9,18 @@
 		{
 			return "lists all land protection blocks and owners";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "  1. listlandprotection summary\n" +
+				   "  2. listlandprotection <steam id>\n" +
+				   "  3. listlandprotection <player name / entity id>\n" +
+				   "  4. listlandprotection nearby\n" +
+				   "  5. listlandprotection nearby <radius>\n" +
+				   "1. Lists only players that own claimstones, the number they own and the protection status\n" +
+				   "2. Lists only the claims of the player given by his SteamID including the individual claim positions\n" +
+				   "3. Same as 2 but player given by his player name or entity id (as given by e.g. \"lpi\")\n" +
+				   "4. Lists claims in a square with edge length of 64 around the executing player\n" +
+				   "5. Same as 4 but square edge length can be specified";
 		}
 
@@ -72,5 +86,5 @@
 				}
 
-				Dictionary<Vector3i, PersistentPlayerData> d = ppl.positionToLPBlockOwner;
+				Dictionary<Vector3i, PersistentPlayerData> d = ppl.m_lpBlockMap;
 				if (d != null) {
 					Dictionary<PersistentPlayerData, List<Vector3i>> owners = new Dictionary<PersistentPlayerData, List<Vector3i>> ();
@@ -93,5 +107,5 @@
 							name += " (" + kvp.Key.PlayerId + ")";
 
-							SdtdConsole.Instance.Output (String.Format ("Player \"{0}\" owns {3} keystones (protected: {1}, current hardness multiplier: {2})", name, w.LandClaimIsActive (kvp.Key), w.LandClaimPower (kvp.Key), kvp.Value.Count));
+							SdtdConsole.Instance.Output (String.Format ("Player \"{0}\" owns {3} keystones (protected: {1}, current hardness multiplier: {2})", name, w.IsLandProtectionValidForPlayer (kvp.Key), w.GetLandProtectionHardnessModifierForPlayer (kvp.Key), kvp.Value.Count));
 							if (!summaryOnly) {
 								foreach (Vector3i v in kvp.Value) {
Index: /binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs	(revision 238)
@@ -9,4 +9,12 @@
 		{
 			return "removes the association of a land protection block to the owner";
+		}
+
+		public override string GetHelp () {
+			return "Usage:" +
+				   "  1. removelandprotection <steamid>\n" +
+				   "  2. removelandprotection <x> <y> <z>\n" +
+				   "1. Remove all land claims owned by the user with the given SteamID\n" +
+				   "2. Remove only the claim block on the exactly given block position";
 		}
 
@@ -65,5 +73,5 @@
 				PersistentPlayerList ppl = GameManager.Instance.GetPersistentPlayerList ();
 
-				Dictionary<Vector3i, PersistentPlayerData> d = ppl.positionToLPBlockOwner;
+				Dictionary<Vector3i, PersistentPlayerData> d = ppl.m_lpBlockMap;
 				if (d == null || !d.ContainsKey (v)) {
 					SdtdConsole.Instance.Output ("No land protection block at the given position or not a valid position. Use \"listlandprotection\" to get a list of keystones.");
Index: /binary-improvements/AllocsCommands/Commands/Reply.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/Reply.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/Reply.cs	(revision 238)
@@ -9,4 +9,10 @@
 		{
 			return "send a message to  the player who last sent you a PM";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "   reply <message>\n" +
+				   "Send the given message to the user you last received a PM from.";
 		}
 
Index: /binary-improvements/AllocsCommands/Commands/SayToPlayer.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/SayToPlayer.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/SayToPlayer.cs	(revision 238)
@@ -9,4 +9,10 @@
 		{
 			return "send a message to a single player";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "   pm <player name / steam id / entity id> <message>\n" +
+				   "Send a PM to the player given by the player name or entity id (as given by e.g. \"lpi\").";
 		}
 
Index: /binary-improvements/AllocsCommands/Commands/ShowInventory.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 238)
@@ -9,5 +9,14 @@
 		public override string GetDescription ()
 		{
-			return "list inventory of a given player (steam id, entity id or name)";
+			return "list inventory of a given player";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "   showinventory <steam id / player name / entity id>\n" +
+				   "Show the inventory of the player given by his SteamID, player name or\n" +
+				   "entity id (as given by e.g. \"lpi\")." +
+				   "Note: This only shows the player's inventory after it was first sent to\n" +
+				   "the server which happens at least every 30 seconds.";
 		}
 
Index: /binary-improvements/AllocsCommands/Commands/TeleportPlayer.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/TeleportPlayer.cs	(revision 237)
+++ /binary-improvements/AllocsCommands/Commands/TeleportPlayer.cs	(revision 238)
@@ -10,4 +10,13 @@
 		{
 			return "teleport a player to a given location";
+		}
+
+		public override string GetHelp () {
+			return "Usage:\n" +
+				   "  1. teleportplayer <steam id / player name / entity id> <x> <y> <z>\n" +
+				   "  2. teleportplayer <steam id / player name / entity id> <target steam id / player name / entity id>\n" +
+				   "1. Teleports the player given by his SteamID, player name or entity id (as given by e.g. \"lpi\")\n" +
+				   "   to the specified location\n" +
+					"2. As 1, but destination given by another player which has to be online";
 		}
 
@@ -61,5 +70,5 @@
 					}
 
-					NetPackage_EntityTeleport pkg = new NetPackage_EntityTeleport (ep1);
+					NetPackageEntityTeleport pkg = new NetPackageEntityTeleport (ep1);
 
 					ci1.SendPackage (pkg);
Index: /binary-improvements/AllocsCommands/ModInfo.xml
===================================================================
--- /binary-improvements/AllocsCommands/ModInfo.xml	(revision 237)
+++ /binary-improvements/AllocsCommands/ModInfo.xml	(revision 238)
@@ -5,5 +5,5 @@
 		<Description value="Additional commands for server operation" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="2" />
+		<Version value="4" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/MapRendering/MapRendering/MapRenderBlockBuffer.cs
===================================================================
--- /binary-improvements/MapRendering/MapRendering/MapRenderBlockBuffer.cs	(revision 237)
+++ /binary-improvements/MapRendering/MapRendering/MapRenderBlockBuffer.cs	(revision 238)
@@ -53,20 +53,20 @@
 		}
 
-		public void SetPart (Vector2i offset, int partSize, Color[] pixels) {
+		public void SetPart (Vector2i offset, int partSize, Color32[] pixels) {
 			if (offset.x + partSize > blockMap.width || offset.y + partSize > blockMap.height) {
 				Log.Error (string.Format ("MapBlockBuffer[{0}].SetPart ({1}, {2}, {3}) has blockMap.size ({4}/{5})", zoomLevel, offset, partSize, pixels.Length, blockMap.width, blockMap.height));
 				return;
 			}
-			blockMap.SetPixels (offset.x, offset.y, partSize, partSize, pixels);
+			blockMap.SetPixels32 (offset.x, offset.y, partSize, partSize, pixels);
 		}
 
-		public Color[] GetHalfScaled ()
+		public Color32[] GetHalfScaled ()
 		{
 			zoomBuffer.Resize (Constants.MAP_BLOCK_SIZE, Constants.MAP_BLOCK_SIZE);
-			zoomBuffer.SetPixels (blockMap.GetPixels ());
+			zoomBuffer.SetPixels32 (blockMap.GetPixels32 ());
 
 			TextureScale.Point (zoomBuffer, Constants.MAP_BLOCK_SIZE / 2, Constants.MAP_BLOCK_SIZE / 2);
 
-			return zoomBuffer.GetPixels ();
+			return zoomBuffer.GetPixels32 ();
 		}
 
Index: /binary-improvements/MapRendering/MapRendering/MapRendering.cs
===================================================================
--- /binary-improvements/MapRendering/MapRendering/MapRendering.cs	(revision 237)
+++ /binary-improvements/MapRendering/MapRendering/MapRendering.cs	(revision 238)
@@ -24,5 +24,5 @@
 		private static object lockObject = new object ();
 		private MapRenderBlockBuffer[] zoomLevelBuffers;
-		private Dictionary<Vector2i, Color[]> dirtyChunks = new Dictionary<Vector2i, Color[]> ();
+		private Dictionary<Vector2i, Color32[]> dirtyChunks = new Dictionary<Vector2i, Color32[]> ();
 		private System.Timers.Timer chunkSaveTimer = new System.Timers.Timer (500);
 		private bool renderingFullMap = false;
@@ -37,5 +37,5 @@
 		private MapRendering ()
 		{
-			Constants.MAP_DIRECTORY = StaticDirectories.GetSaveGameDir () + "/map";
+			Constants.MAP_DIRECTORY = GameUtils.GetSaveGameDir () + "/map";
 
 			lock (lockObject) {
@@ -69,7 +69,7 @@
 								ushort[] mapColors = c.GetMapColors ();
 								if (mapColors != null) {
-									Color[] realColors = new Color[Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE];
+									Color32[] realColors = new Color32[Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE];
 									for (int i_colors = 0; i_colors < mapColors.Length; i_colors++) {
-										realColors [i_colors] = shortColorToColor (mapColors [i_colors]);
+										realColors [i_colors] = shortColorToColor32 (mapColors [i_colors]);
 									}
 									Instance.dirtyChunks [cPos2] = realColors;
@@ -91,5 +91,5 @@
 			MicroStopwatch microStopwatch = new MicroStopwatch ();
 
-			string regionSaveDir = StaticDirectories.GetSaveGameRegionDir ();
+			string regionSaveDir = GameUtils.GetSaveGameRegionDir ();
 			RegionFileManager rfm = new RegionFileManager (regionSaveDir, regionSaveDir, 0, false);
 			Texture2D fullMapTexture = null;
@@ -119,5 +119,5 @@
 				renderingFullMap = true;
 
-				if (widthPix <= 8000 && heightPix <= 8000)
+				if (widthPix <= 8192 && heightPix <= 8192)
 					fullMapTexture = new Texture2D (widthPix, heightPix);
 
@@ -135,11 +135,11 @@
 								ushort[] mapColors = c.GetMapColors ();
 								if (mapColors != null) {
-									Color[] realColors = new Color[Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE];
+									Color32[] realColors = new Color32[Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE];
 									for (int i_colors = 0; i_colors < mapColors.Length; i_colors++) {
-										realColors [i_colors] = shortColorToColor (mapColors [i_colors]);
+										realColors [i_colors] = shortColorToColor32 (mapColors [i_colors]);
 									}
 									dirtyChunks [curChunkPos] = realColors;
 									if (fullMapTexture != null)
-										fullMapTexture.SetPixels (curFullMapPos.x, curFullMapPos.y, Constants.MAP_CHUNK_SIZE, Constants.MAP_CHUNK_SIZE, realColors);
+										fullMapTexture.SetPixels32 (curFullMapPos.x, curFullMapPos.y, Constants.MAP_CHUNK_SIZE, Constants.MAP_CHUNK_SIZE, realColors);
 								}
 							}
@@ -160,5 +160,5 @@
 				byte[] array = fullMapTexture.EncodeToPNG ();
 				File.WriteAllBytes (Constants.MAP_DIRECTORY + "/map.png", array);
-				Texture2D.Destroy (fullMapTexture);
+				UnityEngine.Object.Destroy (fullMapTexture);
 				fullMapTexture = null;
 			}
@@ -337,4 +337,12 @@
 		}
 
+		private static Color32 shortColorToColor32 (ushort col)
+		{
+			byte r = (byte)(256 * (col >> 10 & 31) / 32);
+			byte g = (byte)(256 * (col >> 5 & 31) / 32);
+			byte b = (byte)(256 * (col & 31) / 32);
+			byte a = 255;
+			return new Color32 (r, g, b, a);
+		}
 	}
 }
Index: /binary-improvements/MapRendering/ModInfo.xml
===================================================================
--- /binary-improvements/MapRendering/ModInfo.xml	(revision 237)
+++ /binary-improvements/MapRendering/ModInfo.xml	(revision 238)
@@ -5,5 +5,5 @@
 		<Description value="Render the game map to image map tiles as it is uncovered" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="3" />
+		<Version value="4" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/MapRendering/Web/API/GetLandClaims.cs
===================================================================
--- /binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 237)
+++ /binary-improvements/MapRendering/Web/API/GetLandClaims.cs	(revision 238)
@@ -29,5 +29,5 @@
 			result.Add ("claimowners", claimOwners);
 
-			Dictionary<Vector3i, PersistentPlayerData> d = GameManager.Instance.GetPersistentPlayerList ().positionToLPBlockOwner;
+			Dictionary<Vector3i, PersistentPlayerData> d = GameManager.Instance.GetPersistentPlayerList ().m_lpBlockMap;
 			if (d != null) {
 				World w = GameManager.Instance.World;
@@ -45,5 +45,5 @@
 					if (steamid.Length == 0 || kvp.Key.PlayerId.Equals (steamid)) {
 						string curID = kvp.Key.PlayerId;
-						bool isActive = w.LandClaimIsActive (kvp.Key);
+						bool isActive = w.IsLandProtectionValidForPlayer (kvp.Key);
 
 						JSONObject owner = new JSONObject ();
Index: /binary-improvements/MapRendering/Web/ItemIconHandler.cs
===================================================================
--- /binary-improvements/MapRendering/Web/ItemIconHandler.cs	(revision 238)
+++ /binary-improvements/MapRendering/Web/ItemIconHandler.cs	(revision 238)
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Threading;
+
+using UnityEngine;
+
+namespace AllocsFixes.NetConnections.Servers.Web
+{
+	public class ItemIconHandler : PathHandler
+	{
+		private string staticPart;
+		private bool logMissingFiles;
+		private Dictionary<string, byte[]> icons = new Dictionary<string, byte[]> ();
+		private bool loaded = false;
+
+		public ItemIconHandler (string staticPart, bool logMissingFiles) {
+			this.staticPart = staticPart;
+			this.logMissingFiles = logMissingFiles;
+		}
+
+		public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user) {
+			if (!loaded) {
+				if (!LoadIcons ()) {
+					resp.StatusCode = (int)HttpStatusCode.NotFound;
+					Log.Out ("Web:IconHandler: Could not load icons");
+					return;
+				}
+			}
+
+			string fn = req.Url.AbsolutePath.Remove (0, staticPart.Length);
+			fn = fn.Remove (fn.LastIndexOf ('.'));
+
+			if (icons.ContainsKey (fn)) {
+				resp.ContentType = MimeType.GetMimeType (".png");
+				resp.ContentLength64 = icons [fn].Length;
+				resp.OutputStream.Write (icons [fn], 0, icons [fn].Length);
+			} else {
+				resp.StatusCode = (int)HttpStatusCode.NotFound;
+				if (logMissingFiles)
+					Log.Out ("Web:IconHandler:FileNotFound: \"" + req.Url.AbsolutePath + "\" ");
+				return;
+			}
+		}
+
+		private bool LoadIcons () {
+			loaded = true;
+
+			GameObject atlasObj = GameObject.Find ("/NGUI Root (2D)/ItemIconAtlas");
+			if (atlasObj == null) {
+				Log.Error ("Web:IconHandler: Atlas object not found");
+				return false;
+			}
+			DynamicUIAtlas atlas = atlasObj.GetComponent<DynamicUIAtlas> ();
+			if (atlas == null) {
+				Log.Error ("Web:IconHandler: Atlas component not found");
+				return false;
+			}
+
+			Texture2D atlasTex = atlas.texture as Texture2D;
+
+			foreach (UISpriteData data in atlas.spriteList) {
+				string name = data.name;
+				Texture2D tex = new Texture2D (data.width, data.height, TextureFormat.ARGB32, false);
+				tex.SetPixels (atlasTex.GetPixels (data.x, atlasTex.height - data.height - data.y, data.width, data.height));
+				byte[] pixData = tex.EncodeToPNG ();
+
+				icons.Add (name, pixData);
+				UnityEngine.Object.Destroy (tex);
+			}
+
+			return true;
+		}
+	}
+}
+
Index: /binary-improvements/MapRendering/Web/Web.cs
===================================================================
--- /binary-improvements/MapRendering/Web/Web.cs	(revision 237)
+++ /binary-improvements/MapRendering/Web/Web.cs	(revision 238)
@@ -56,8 +56,15 @@
 
 				handlers.Add (
+					"/itemicons/",
+					new ItemIconHandler (
+						"/itemicons/",
+						true)
+				);
+
+				handlers.Add (
 					"/map/",
 					new StaticHandler (
 						"/map/",
-						StaticDirectories.GetSaveGameDir () + "/map",
+						GameUtils.GetSaveGameDir () + "/map",
 						MapRendering.MapRendering.GetTileCache (),
 						false)
Index: /binary-improvements/MapRendering/WebAndMapRendering.csproj
===================================================================
--- /binary-improvements/MapRendering/WebAndMapRendering.csproj	(revision 237)
+++ /binary-improvements/MapRendering/WebAndMapRendering.csproj	(revision 238)
@@ -59,4 +59,5 @@
     <Compile Include="Web\API\GetLandClaims.cs" />
     <Compile Include="Commands\webstat.cs" />
+    <Compile Include="Web\ItemIconHandler.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /binary-improvements/bundle_creation/makefile
===================================================================
--- /binary-improvements/bundle_creation/makefile	(revision 237)
+++ /binary-improvements/bundle_creation/makefile	(revision 238)
@@ -20,5 +20,5 @@
 ${ARCHIVENAME}: CONTENTS
 	@echo Creating archive...
-	@tar -czf ${ARCHIVENAME} 7DaysToDie_Data Mods
+	@tar -czf ${ARCHIVENAME} Mods
 
 CONTENTS: SERVERFIXES
@@ -26,8 +26,5 @@
 SERVERFIXES:
 	@echo Copying server fixes...
-	@rm 7DaysToDie_Data -Rf
 	@rm Mods -Rf
-	@mkdir -p 7DaysToDie_Data/Managed
-	@cp ../7dtd-binaries/Assembly-CSharp.dll 7DaysToDie_Data/Managed/Assembly-CSharp.dll
 	@mkdir -p Mods
 	@cp ../bin/Mods/* Mods/ -R
@@ -39,4 +36,4 @@
 clean:
 	@echo Cleaning intermediate stuff...
-	@rm -Rf 7DaysToDie_Data Mods server_fixes_v*.tar.gz
+	@rm -Rf Mods server_fixes_v*.tar.gz
 
Index: /binary-improvements/server-fixes.userprefs
===================================================================
--- /binary-improvements/server-fixes.userprefs	(revision 237)
+++ /binary-improvements/server-fixes.userprefs	(revision 238)
@@ -1,8 +1,8 @@
 ﻿<Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release_Version" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="MapRendering/MapRendering/MapRendering.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="7dtd-server-fixes/src/ChatHookExample.cs">
     <Files>
-      <File FileName="MapRendering/MapRendering/MapRenderBlockBuffer.cs" Line="73" Column="54" />
-      <File FileName="MapRendering/MapRendering/MapRendering.cs" Line="89" Column="3" />
+      <File FileName="MapRendering/MapRendering/MapRenderBlockBuffer.cs" Line="66" Column="53" />
+      <File FileName="MapRendering/MapRendering/MapRendering.cs" Line="343" Column="42" />
       <File FileName="MapRendering/MapRendering/Constants.cs" Line="1" Column="1" />
       <File FileName="MapRendering/Web/API/GetPlayersOnline.cs" Line="32" Column="80" />
@@ -10,9 +10,13 @@
       <File FileName="MapRendering/Web/API/GetPlayersLocation.cs" Line="18" Column="40" />
       <File FileName="7dtd-server-fixes/src/PersistentData/Players.cs" Line="13" Column="19" />
-      <File FileName="AllocsCommands/Commands/TeleportPlayer.cs" Line="66" Column="1" />
-      <File FileName="AllocsCommands/Chat.cs" Line="15" Column="25" />
-      <File FileName="7dtd-server-fixes/src/API.cs" Line="13" Column="4" />
-      <File FileName="7dtd-server-fixes/src/ItemList.cs" Line="47" Column="22" />
-      <File FileName="MapRendering/Commands/RenderMap.cs" Line="23" Column="58" />
+      <File FileName="7dtd-server-fixes/src/AssemblyInfo.cs" Line="20" Column="35" />
+      <File FileName="7dtd-server-fixes/ModInfo.xml" Line="7" Column="20" />
+      <File FileName="AllocsCommands/ModInfo.xml" Line="7" Column="20" />
+      <File FileName="MapRendering/ModInfo.xml" Line="7" Column="20" />
+      <File FileName="MapRendering/Web/ApiHandler.cs" Line="31" Column="3" />
+      <File FileName="MapRendering/Web/Web.cs" Line="59" Column="19" />
+      <File FileName="MapRendering/Web/ItemIconHandler.cs" Line="27" Column="53" />
+      <File FileName="7dtd-server-fixes/src/ChatHookExample.cs" Line="17" Column="53" />
+      <File FileName="7dtd-server-fixes/src/API.cs" Line="31" Column="28" />
     </Files>
     <Pads>
