Index: /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj
===================================================================
--- /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj	(revision 273)
@@ -92,4 +92,5 @@
     <Compile Include="src\AllocsUtils.cs" />
     <Compile Include="src\LandClaimList.cs" />
+    <Compile Include="src\PersistentData\Attributes.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /binary-improvements/7dtd-server-fixes/ModInfo.xml
===================================================================
--- /binary-improvements/7dtd-server-fixes/ModInfo.xml	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/ModInfo.xml	(revision 273)
@@ -5,5 +5,5 @@
 		<Description value="Common functions" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="9" />
+		<Version value="10" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/src/AllocsLogFunctions.cs	(revision 273)
@@ -15,4 +15,5 @@
 					", name=" + _cInfo.playerName +
 					", steamid=" + _cInfo.playerId +
+					", steamOwner=" + _cInfo.ownerId +
 					", ip=" + _cInfo.ip
 				);
Index: /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs	(revision 273)
@@ -7,9 +7,10 @@
 
 		public static bool Hook (ClientInfo _cInfo, EnumGameMessages _type, string _message, string _playerName) {
-			if (!string.IsNullOrEmpty (_message)) {
+			if (_type == EnumGameMessages.Chat && !string.IsNullOrEmpty (_message)) {
 				if (_message.ToLower () == "/alloc") {
 					if (_cInfo != null) {
 						Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
 						_cInfo.SendPackage (new NetPackageGameMessage (EnumGameMessages.Chat, ANSWER, "", false, "", false));
+						GameManager.Instance.GameMessageServer (_cInfo, EnumGameMessages.Chat, string.Format("!{0}", _message), _playerName, false, "", false);
 					} else {
 						Log.Error ("Argument _cInfo null on message: {0}", _message);
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/Attributes.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/Attributes.cs	(revision 273)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/Attributes.cs	(revision 273)
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text.RegularExpressions;
+
+namespace AllocsFixes.PersistentData
+{
+	[Serializable]
+	public class Attributes
+	{
+		private bool hideChatCommands;
+		private String hideChatCommandPrefix;
+
+		public bool HideChatCommands {
+			get {
+				return hideChatCommands;
+			}
+			set {
+				hideChatCommands = value;
+			}
+		}
+
+		public string HideChatCommandPrefix {
+			get {
+				if (hideChatCommandPrefix == null) {
+					hideChatCommandPrefix = "";
+				}
+				return hideChatCommandPrefix;
+			}
+			set {
+				hideChatCommandPrefix = value;
+			}
+		}
+
+	}
+}
+
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs	(revision 273)
@@ -10,4 +10,6 @@
 	{
 		private Players players;
+		[OptionalField]
+		private Attributes attributes;
 
 		public Players Players {
@@ -16,4 +18,14 @@
 					players = new Players ();
 				return players;
+			}
+		}
+
+		public Attributes Attributes
+		{
+			get {
+				if (attributes == null) {
+					attributes = new Attributes();
+				}
+				return attributes;
 			}
 		}
Index: /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs
===================================================================
--- /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 272)
+++ /binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs	(revision 273)
@@ -22,4 +22,8 @@
 		[OptionalField]
 		private uint experience;
+		[OptionalField]
+		private bool chatMuted;
+		[OptionalField]
+		private int maxChatLength;
 		[NonSerialized]
 		private ClientInfo
@@ -122,4 +126,25 @@
 		}
 
+		public bool IsChatMuted{
+			get {
+				return chatMuted;
+			}
+			set {
+				chatMuted = value;
+			}
+		}
+
+		public int MaxChatLength {
+			get {
+				if (maxChatLength == 0 ) {
+					maxChatLength = 255;
+				}
+				return maxChatLength;
+			}
+			set {
+				maxChatLength = value;
+			}
+		}
+
 		public void SetOffline ()
 		{
Index: /binary-improvements/AllocsCommands/Commands/ListItems.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ListItems.cs	(revision 272)
+++ /binary-improvements/AllocsCommands/Commands/ListItems.cs	(revision 273)
@@ -26,5 +26,5 @@
 				int n = 0;
 				foreach (string s in ItemList.Instance.ItemNames) {
-					if (s.ToLower ().Contains (_params [0].ToLower ())) {
+					if (s.ToLower ().Contains (_params [0].ToLower ()) || _params[0].Trim().Equals("*")) {
 						SdtdConsole.Instance.Output ("    " + s);
 						n++;
Index: /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 272)
+++ /binary-improvements/AllocsCommands/Commands/ListLandProtection.cs	(revision 273)
@@ -13,14 +13,11 @@
 		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";
+			"  1. listlandprotection summary\n" +
+			"  2. listlandprotection <steam id / player name / entity id> [parseable]\n" +
+			"  3. listlandprotection nearby [length]\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 / entity id / playername, including the individual claim positions.\n" +
+			"   If \"parseable\" is specified the output of the individual claims will be in a format better suited for programmatical readout.\n" +
+			"3. Lists claims in a square with edge length of 64 (or the optionally specified size) around the executing player\n";
 		}
 
@@ -47,4 +44,10 @@
 				bool onlyCloseToPlayer = false;
 				int closeToDistance = 32;
+				bool parseableOutput = false;
+
+				if (_params.Contains ("parseable")) {
+					parseableOutput = true;
+					_params.Remove ("parseable");
+				}
 
 				if (_params.Count == 1) {
@@ -69,6 +72,8 @@
 							if (_params.Count == 3) {
 								if (!int.TryParse (_params[1], out closeToDistance)) {
-									SdtdConsole.Instance.Output ("Given radius is not an integer!");
+									SdtdConsole.Instance.Output ("Given length is not an integer!");
+									return;
 								}
+								closeToDistance /= 2;
 							}
 							ClientInfo ci = ConsoleHelper.ParseParamSteamIdOnline (_params [_params.Count - 1]);
@@ -79,4 +84,5 @@
 							SdtdConsole.Instance.Output ("Error getting current player's position");
 							Log.Out ("Error in ListLandProtection.Run: " + e);
+							return;
 						}
 					} else {
@@ -108,5 +114,9 @@
 					if (!summaryOnly) {
 						foreach (Vector3i v in kvp.Value) {
-							SdtdConsole.Instance.Output ("   (" + v.ToString () + ")");
+							if (parseableOutput) {
+								SdtdConsole.Instance.Output ("LandProtectionOf: id=" + kvp.Key.SteamID + ", playerName=" + kvp.Key.Name + ", location=" + v.ToString ());
+							} else {
+								SdtdConsole.Instance.Output ("   (" + v.ToString () + ")");
+							}
 						}
 					}
Index: /binary-improvements/AllocsCommands/Commands/RepairChunkDensity.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/RepairChunkDensity.cs	(revision 272)
+++ /binary-improvements/AllocsCommands/Commands/RepairChunkDensity.cs	(revision 273)
@@ -11,11 +11,14 @@
 
 		public override string GetHelp () {
-			return "Usage:\n" +
+			return "This command is used to check if the densities of blocks in a chunk match the actual block type.\n" +
+				"If there is a mismatch it can lead to the chunk rendering incorrectly or not at all, typically\n" +
+				"indicated by the error message \"Failed setting triangles. Some indices are referencing out of\n" +
+				"bounds vertices.\". It can also fix such mismatches within a chunk.\n" +
+				"Usage:\n" +
 				"  1. repairchunkdensity <x> <z>\n" +
 				"  2. repairchunkdensity <x> <z> fix\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. Use y = -1 to spawn on ground.\n" +
-				"2. As 1, but destination given by another player which has to be online\n" +
-				"3. Teleport the local player to the position calculated by his current position and the given offsets";
+				"1. Just checks the chunk and prints mismatched to the server log. x and z are the coordinates of any\n" +
+				"   block within the chunk to check.\n" +
+				"2. Repairs any mismatch found in the chunk.";
 		}
 
Index: /binary-improvements/AllocsCommands/Commands/ShowInventory.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 272)
+++ /binary-improvements/AllocsCommands/Commands/ShowInventory.cs	(revision 273)
@@ -5,27 +5,34 @@
 namespace AllocsFixes.CustomCommands
 {
-	public class ShowInventory : ConsoleCmdAbstract {
+	public class ShowInventory : ConsoleCmdAbstract
+	{
 
-		public override string GetDescription () {
+		public override string GetDescription ()
+		{
 			return "list inventory of a given player";
 		}
 
-		public override string GetHelp () {
+		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.";
+			"   showinventory <steam id / player name / entity id> [tag]\n" +
+			"Show the inventory of the player given by his SteamID, player name or\n" +
+			"entity id (as given by e.g. \"lpi\").\n" +
+			"Optionally specify a tag that is included in each line of the output. In\n" +
+			"this case output is designed to be easily parseable by tools.\n" +
+			"Note: This only shows the player's inventory after it was first sent to\n" +
+			"the server which happens at least every 30 seconds.";
 		}
 
-		public override string[] GetCommands () {
+		public override string[] GetCommands ()
+		{
 			return new string[] { "showinventory", "si" };
 		}
 
-		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
 			try {
 				if (_params.Count < 1) {
-					SdtdConsole.Instance.Output ("Usage: showinventory <steamid|playername|entityid>");
+					SdtdConsole.Instance.Output ("Usage: showinventory <steamid|playername|entityid> [tag]");
 					return;
 				}
@@ -37,17 +44,27 @@
 				}
 
+				string tag = null;
+				if (_params.Count > 1 && _params [1].Length > 0) {
+					tag = _params [1];
+				}
+
 				Player p = PersistentContainer.Instance.Players [steamid, false];
 				PersistentData.Inventory inv = p.Inventory;
 
-				SdtdConsole.Instance.Output ("Belt of player " + p.Name + ":");
-				PrintInv (inv.belt);
-				SdtdConsole.Instance.Output (string.Empty);
+				if (tag == null)
+					SdtdConsole.Instance.Output ("Belt of player " + p.Name + ":");
+				PrintInv (inv.belt, p.EntityID, "belt", tag);
+				if (tag == null)
+					SdtdConsole.Instance.Output (string.Empty);
 
-				SdtdConsole.Instance.Output ("Bagpack of player " + p.Name + ":");
-				PrintInv (inv.bag);
-				SdtdConsole.Instance.Output (string.Empty);
+				if (tag == null)
+					SdtdConsole.Instance.Output ("Bagpack of player " + p.Name + ":");
+				PrintInv (inv.bag, p.EntityID, "backpack", tag);
+				if (tag == null)
+					SdtdConsole.Instance.Output (string.Empty);
 
-				SdtdConsole.Instance.Output ("Equipment of player " + p.Name + ":");
-				PrintEquipment (inv.equipment);
+				if (tag == null)
+					SdtdConsole.Instance.Output ("Equipment of player " + p.Name + ":");
+				PrintEquipment (inv.equipment, p.EntityID, "equipment", tag);
 
 			} catch (Exception e) {
@@ -56,34 +73,43 @@
 		}
 
-		private void PrintInv (List<InvItem> _inv) {
+		private void PrintInv (List<InvItem> _inv, int _entityId, string _location, string _tag)
+		{
 			for (int i = 0; i < _inv.Count; i++) {
 				if (_inv [i] != null) {
-					if (_inv [i].quality < 0) {
-						SdtdConsole.Instance.Output (string.Format ("    Slot {0}: {1:000} * {2}", i, _inv [i].count, _inv [i].itemName));
-					} else {
-						SdtdConsole.Instance.Output (string.Format ("    Slot {0}: {1:000} * {2} - quality: {3}", i, _inv [i].count, _inv [i].itemName, _inv [i].quality));
+					if (_tag == null) { // no Tag defined -> readable output
+						if (_inv [i].quality < 0) {
+							SdtdConsole.Instance.Output (string.Format ("    Slot {0}: {1:000} * {2}", i, _inv [i].count, _inv [i].itemName));
+						} else {
+							SdtdConsole.Instance.Output (string.Format ("    Slot {0}: {1:000} * {2} - quality: {3}", i, _inv [i].count, _inv [i].itemName, _inv [i].quality));
+						}
+						DoParts (_inv [i].parts, 1, null);
+					} else { // Tag defined -> parseable output
+						String partsMsg = DoParts(_inv[i].parts, 1, "");
+						String msg = "tracker_item id=" + _entityId + ", tag=" + _tag + ", location=" + _location + ", slot=" + i + ", item=" + _inv[i].itemName + ", qnty=" + _inv[i].count + ", quality=" + _inv[i].quality + ", parts=(" + partsMsg + ")";
+						SdtdConsole.Instance.Output(msg);
 					}
-					DoParts (_inv [i].parts, 1);
 				}
 			}
 		}
 
-		private void PrintEquipment (InvItem[] _equipment) {
-			AddEquipment ("head", _equipment, EquipmentSlots.Headgear);
-			AddEquipment ("eyes", _equipment, EquipmentSlots.Eyewear);
-			AddEquipment ("face", _equipment, EquipmentSlots.Face);
+		private void PrintEquipment (InvItem[] _equipment, int _entityId, string _location, string _tag)
+		{
+			AddEquipment ("head", _equipment, EquipmentSlots.Headgear, _entityId, _location, _tag);
+			AddEquipment ("eyes", _equipment, EquipmentSlots.Eyewear, _entityId, _location, _tag);
+			AddEquipment ("face", _equipment, EquipmentSlots.Face, _entityId, _location, _tag);
 
-			AddEquipment ("armor", _equipment, EquipmentSlots.ChestArmor);
-			AddEquipment ("jacket", _equipment, EquipmentSlots.Jacket);
-			AddEquipment ("shirt", _equipment, EquipmentSlots.Shirt);
+			AddEquipment ("armor", _equipment, EquipmentSlots.ChestArmor, _entityId, _location, _tag);
+			AddEquipment ("jacket", _equipment, EquipmentSlots.Jacket, _entityId, _location, _tag);
+			AddEquipment ("shirt", _equipment, EquipmentSlots.Shirt, _entityId, _location, _tag);
 
-			AddEquipment ("legarmor", _equipment, EquipmentSlots.LegArmor);
-			AddEquipment ("pants", _equipment, EquipmentSlots.Legs);
-			AddEquipment ("boots", _equipment, EquipmentSlots.Feet);
+			AddEquipment ("legarmor", _equipment, EquipmentSlots.LegArmor, _entityId, _location, _tag);
+			AddEquipment ("pants", _equipment, EquipmentSlots.Legs, _entityId, _location, _tag);
+			AddEquipment ("boots", _equipment, EquipmentSlots.Feet, _entityId, _location, _tag);
 
-			AddEquipment ("gloves", _equipment, EquipmentSlots.Hands);
+			AddEquipment ("gloves", _equipment, EquipmentSlots.Hands, _entityId, _location, _tag);
 		}
 
-		private void AddEquipment (string _slotname, InvItem[] _items, EquipmentSlots _slot) {
+		private void AddEquipment (string _slotname, InvItem[] _items, EquipmentSlots _slot, int _entityId, string _location, string _tag)
+		{
 			int[] slotindices = XUiM_PlayerEquipment.GetSlotIndicesByEquipmentSlot (_slot);
 
@@ -91,10 +117,16 @@
 				if (_items != null && _items [slotindices [i]] != null) {
 					InvItem item = _items [slotindices [i]];
-					if (item.quality < 0) {
-						SdtdConsole.Instance.Output (string.Format ("    Slot {0:8}: {1:000}", _slotname, item.itemName));
-					} else {
-						SdtdConsole.Instance.Output (string.Format ("    Slot {0:8}: {1:000} - quality: {2}", _slotname, item.itemName, item.quality));
+					if (_tag == null) { // no Tag defined -> readable output
+						if (item.quality < 0) {
+							SdtdConsole.Instance.Output (string.Format ("    Slot {0:8}: {1:000}", _slotname, item.itemName));
+						} else {
+							SdtdConsole.Instance.Output (string.Format ("    Slot {0:8}: {1:000} - quality: {2}", _slotname, item.itemName, item.quality));
+						}
+						DoParts (_items [slotindices [i]].parts, 1, null);
+					} else { // Tag defined -> parseable output
+						String partsMsg = DoParts(_items[slotindices[i]].parts, 1, "");
+						String msg = "tracker_item id=" + _entityId + ", tag=" + _tag + ", location=" + _location + ", slot=" + _slotname + ", item=" + item.itemName + ", qnty=1, quality=" + item.quality + ", parts=(" +  partsMsg + ")";
+						SdtdConsole.Instance.Output(msg);
 					}
-					DoParts (_items [slotindices [i]].parts, 1);
 					return;
 				}
@@ -102,18 +134,28 @@
 		}
 
-		private void DoParts (InvItem[] _parts, int _indent) {
+		private string DoParts (InvItem[] _parts, int _indent, string _currentMessage)
+		{
 			if (_parts != null && _parts.Length > 0) {
 				string indenter = new string (' ', _indent * 4);
 				for (int i = 0; i < _parts.Length; i++) {
 					if (_parts [i] != null) {
-						if (_parts [i].quality < 0) {
-							SdtdConsole.Instance.Output (string.Format ("{0}         - {1}", indenter, _parts [i].itemName));
-						} else {
-							SdtdConsole.Instance.Output (string.Format ("{0}         - {1} - quality: {2}", indenter, _parts [i].itemName, _parts [i].quality));
+						if (_currentMessage == null) { // no currentMessage given -> readable output
+							if (_parts [i].quality < 0) {
+								SdtdConsole.Instance.Output (string.Format ("{0}         - {1}", indenter, _parts [i].itemName));
+							} else {
+								SdtdConsole.Instance.Output (string.Format ("{0}         - {1} - quality: {2}", indenter, _parts [i].itemName, _parts [i].quality));
+							}
+							DoParts (_parts [i].parts, _indent + 1, _currentMessage);
+						} else { // currentMessage given -> parseable output
+							if (_currentMessage.Length > 0) {
+								_currentMessage += ",";
+							}
+							_currentMessage += _parts[i].itemName + "@" + _parts[i].quality;
+							_currentMessage = DoParts (_parts [i].parts, _indent + 1, _currentMessage);
 						}
-						DoParts (_parts [i].parts, _indent + 1);
 					}
 				}
 			}
+			return _currentMessage;
 		}
 
Index: /binary-improvements/AllocsCommands/ModInfo.xml
===================================================================
--- /binary-improvements/AllocsCommands/ModInfo.xml	(revision 272)
+++ /binary-improvements/AllocsCommands/ModInfo.xml	(revision 273)
@@ -5,5 +5,5 @@
 		<Description value="Additional commands for server operation" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="7" />
+		<Version value="8" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/CoppisAdditions/CoppisAdditions.csproj
===================================================================
--- /binary-improvements/CoppisAdditions/CoppisAdditions.csproj	(revision 273)
+++ /binary-improvements/CoppisAdditions/CoppisAdditions.csproj	(revision 273)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{771240CA-9B22-4AFE-A422-959E74B645B2}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>CoppisAdditions</RootNamespace>
+    <AssemblyName>CoppisAdditions</AssemblyName>
+    <UseMSBuildEngine>True</UseMSBuildEngine>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <Optimize>true</Optimize>
+    <OutputPath>..\bin\Mods\CoppisAdditions\</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <NoStdLib>true</NoStdLib>
+  </PropertyGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ItemGroup>
+    <Reference Include="Assembly-CSharp">
+      <HintPath>..\7dtd-binaries\Assembly-CSharp.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="UnityEngine">
+      <HintPath>..\7dtd-binaries\UnityEngine.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="LogLibrary">
+      <HintPath>..\7dtd-binaries\LogLibrary.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="mscorlib">
+      <HintPath>..\7dtd-binaries\mscorlib.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System">
+      <HintPath>..\7dtd-binaries\System.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="src\Commands\GiveXP.cs" />
+    <Compile Include="src\Commands\ListPlayersBed.cs" />
+    <Compile Include="src\Commands\ListPlayersFriends.cs" />
+    <Compile Include="src\Commands\Physics.cs" />
+    <Compile Include="src\Commands\SpawnMultipleEntity.cs" />
+    <Compile Include="src\Commands\SpawnScouts.cs" />
+    <Compile Include="src\Commands\UnlockAll.cs" />
+    <Compile Include="src\Commands\SpawnHorde.cs" />
+    <Compile Include="src\API.cs" />
+    <Compile Include="src\ChatFilter.cs" />
+    <Compile Include="src\Commands\MutePlayerChat.cs" />
+    <Compile Include="src\Commands\PlayerChatMaxLength.cs" />
+    <Compile Include="src\Commands\TeleportPlayerHome.cs" />
+    <Compile Include="src\Commands\ToogleChatCommandHide.cs" />
+    <Compile Include="src\Commands\SayToPlayer2.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ModInfo.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\7dtd-server-fixes\7dtd-server-fixes.csproj">
+      <Project>{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}</Project>
+      <Name>7dtd-server-fixes</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\AllocsCommands\AllocsCommands.csproj">
+      <Project>{E273D042-57F9-4E2E-8268-5053527E5287}</Project>
+      <Name>AllocsCommands</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
Index: /binary-improvements/CoppisAdditions/ModInfo.xml
===================================================================
--- /binary-improvements/CoppisAdditions/ModInfo.xml	(revision 273)
+++ /binary-improvements/CoppisAdditions/ModInfo.xml	(revision 273)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xml>
+	<ModInfo>
+		<Name value="Coppis command additions" />
+		<Description value="Additional management and player control functionality" />
+		<Author value="Coppi" />
+		<Version value="1" />
+		<Website value="http://7dtd.illy.bz" />
+	</ModInfo>
+</xml>
Index: /binary-improvements/CoppisAdditions/src/API.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/API.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/API.cs	(revision 273)
@@ -0,0 +1,12 @@
+using System;
+
+namespace CoppisAdditions
+{
+	public class API : ModApiAbstract {
+
+		public override bool ChatMessage (ClientInfo _cInfo, EnumGameMessages _type, string _msg, string _mainName, bool _localizeMain, string _secondaryName, bool _localizeSecondary) {
+			return ChatFilter.Exec (_cInfo, _type, _msg, _mainName);
+		}
+	}
+}
+
Index: /binary-improvements/CoppisAdditions/src/ChatFilter.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/ChatFilter.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/ChatFilter.cs	(revision 273)
@@ -0,0 +1,42 @@
+using System;
+using AllocsFixes.PersistentData;
+
+namespace CoppisAdditions
+{
+	public class ChatFilter
+	{
+
+		public static bool Exec (ClientInfo _cInfo, EnumGameMessages _type, string _message, string _playerName)
+		{
+			if (_type == EnumGameMessages.Chat && !string.IsNullOrEmpty (_message)) {
+				if (_cInfo != null) {
+					Player p = PersistentContainer.Instance.Players [_cInfo.playerId, false];
+					if (p != null) {
+						if (_message.Length > p.MaxChatLength) {
+							_cInfo.SendPackage (new NetPackageGameMessage (EnumGameMessages.Chat, "Your message was too long. So we blocked it!", "Server (PM)", false, "", false));
+							return false;
+						}
+						if (p.IsChatMuted) {
+							_cInfo.SendPackage (new NetPackageGameMessage (EnumGameMessages.Chat, "Your chat is muted!", "Server (PM)", false, "", false));
+							return false;
+						}
+
+						//Check its a command
+						if (PersistentContainer.Instance.Attributes.HideChatCommands) {
+							if (_message.Trim ().StartsWith (PersistentContainer.Instance.Attributes.HideChatCommandPrefix)) {
+								_cInfo.SendPackage (new NetPackageGameMessage (EnumGameMessages.Chat, "Command received " + _message, "Server (PM)", false, "", false));
+								Log.Out ("Chat command from '" + p.Name + "': " + _message);
+								return false;
+							}
+						}
+					}
+				} else {
+					Log.Error ("Argument _cInfo null on message: {0}", _message);
+				}
+			}
+
+			return true;
+		}
+
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/GiveXP.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/GiveXP.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/GiveXP.cs	(revision 273)
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class GiveXP : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "give an amount XP to a player (entity id or name)";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Give XP to a player\n" +
+			"Usage:\n" +
+			"   givexp <name / entity id> <amount xp> <skill name>\n" +
+			"Skills names are: Athletics, Scavenging, Clothing, Light_Armor, Heavy_Armor, Blunt_Weapons, Blade_Weapons, Mining_Tools, Construction_Tools, Pistols, Shotguns, Rifles, Archery, Medicine, Weapon_Smithing, Tool_Smithing, Gun_Smithing, Science, Tailoring, Leatherworking, Armor_Smithing, Miscellaneous_Crafting, Quality_Joe";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "givexp" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count != 3) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 3, found " + _params.Count + ".");
+					return;
+				}
+
+				ClientInfo ci = ConsoleHelper.ParseParamIdOrName (_params [0]);
+				if (ci == null) {
+					SdtdConsole.Instance.Output ("Playername or entity id not found.");
+					return;
+				}
+
+				int xp = int.MinValue;
+				int.TryParse (_params [1], out xp);
+
+				if (xp <= 0) {
+					SdtdConsole.Instance.Output ("The amount of XP is not a valid positive integer.");
+					return;
+				}
+
+				String skillName = _params [2].Replace ('_', ' ');
+
+				Skill skill = new Skills ().GetSkillByName (skillName);
+				if (skill == null) {
+					SdtdConsole.Instance.Output ("Invalid skill name: \"" + skillName + "\"");
+					return;
+				}
+				EntityPlayer ep = GameManager.Instance.World.Players.dict [ci.entityId];
+				GameManager.Instance.AddExpServer (ci.entityId, skill.Id, xp);
+				SdtdConsole.Instance.Output (xp + " xp was given on skill " + skillName + " to player " + ci.playerName);
+			} catch (Exception e) {
+				Log.Out ("Error in GiveXP.Execute: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/ListPlayersBed.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/ListPlayersBed.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/ListPlayersBed.cs	(revision 273)
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class ListPlayersBed : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "list bed locations of all players or a specific player";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Usage:\n" +
+			"  1. lpb <steam id / player name / entity id>" +
+			"or " +
+			"  2. lpb  *this will list all players online and their bed";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "listplayerbed", "lpb" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count > 1) {
+					SdtdConsole.Instance.Output ("Usage: listplayerbed <entityid|playername|steamid> or listplayerbed (without params)");
+				} else {
+					if (_params.Count == 1) {
+						ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (_params [0]);
+						if (ci1 == null) {
+							SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+							return;
+						}
+						EntityPlayer ep1 = GameManager.Instance.World.Players.dict [ci1.entityId];
+						EntityBedrollPositionList bed = ep1.SpawnPoints;
+
+						if (bed.Count == 0) {
+							SdtdConsole.Instance.Output ("The player does not have a bed");
+							return;
+						}
+						for (int x = 0; x < bed.Count; x++) {
+							Vector3i pos = bed [x];
+							SdtdConsole.Instance.Output ("PlayerBed: " + ep1.EntityName + " at " + pos.x + ", " + pos.y + ", " + pos.z);
+						}
+					} else if (_params.Count == 0) {
+						Dictionary<int, EntityPlayer>.Enumerator enumerator = GameManager.Instance.World.Players.dict.GetEnumerator ();
+						while (enumerator.MoveNext ()) {
+							KeyValuePair<int, EntityPlayer> pair = enumerator.Current;
+							EntityPlayer ep1 = pair.Value;
+							EntityBedrollPositionList bed = ep1.SpawnPoints;
+							if (bed.Count == 0) {
+								SdtdConsole.Instance.Output ("The player " + ep1.EntityName + " does not have any bed");
+								return;
+							} else {
+								for (int x = 0; x < bed.Count; x++) {
+									Vector3i pos = bed [x];
+									SdtdConsole.Instance.Output (ep1.EntityName + ": " + pos.x + ", " + pos.y + ", " + pos.z);
+								}
+							}
+						}
+					}
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in ListPlayersBed.Run: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/ListPlayersFriends.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/ListPlayersFriends.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/ListPlayersFriends.cs	(revision 273)
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class ListPlayersFriends : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "list friends of a single player or all players";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Usage:\n" +
+			"  1. lpf <steam id / player name / entity id>" +
+			"  2. lpf (to list all players friends)";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "listplayerfriends", "lpf" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count > 1) {
+					SdtdConsole.Instance.Output ("Usage: listplayerfriends <entityid|playername|steamid> or listplayerfriends");
+				} else {
+					if (_params.Count == 0) {
+						Dictionary<int, EntityPlayer>.Enumerator playerEnum = GameManager.Instance.World.Players.dict.GetEnumerator ();
+						while (playerEnum.MoveNext ()) {
+							try {
+								KeyValuePair<int, EntityPlayer> pair = playerEnum.Current;
+								ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (pair.Value.entityId.ToString ());
+								PersistentPlayerData data = GameManager.Instance.persistentPlayers.GetPlayerData (ci1.playerId);
+								HashSet<string>.Enumerator enumeratorFriends = data.ACL.GetEnumerator ();
+								String friends = "";
+								while (enumeratorFriends.MoveNext ()) {
+									string str = enumeratorFriends.Current;
+									if (str != null) {
+										if (!friends.Equals ("")) {
+											friends += ",";
+										}
+										friends += str;
+									}
+								}
+								SdtdConsole.Instance.Output ("FriendsOf id=" + pair.Value.entityId + ", friends=" + friends);
+							} catch (Exception e) {
+                                
+							}
+						}
+					} else { 
+						ClientInfo ci = ConsoleHelper.ParseParamIdOrName (_params [0]);
+						if (ci == null) {
+							SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+							return;
+						}
+						EntityPlayer ep = GameManager.Instance.World.Players.dict [ci.entityId];
+						PersistentPlayerData data = GameManager.Instance.persistentPlayers.GetPlayerDataFromEntityID (ci.entityId);
+
+						HashSet<string>.Enumerator enumerator = data.ACL.GetEnumerator ();
+						//int count = 0;
+						String friends = "";
+						while (enumerator.MoveNext ()) {
+							string str = enumerator.Current;
+							if (!friends.Equals ("")) {
+								friends += ",";
+							}
+							friends += str;
+                           
+							//Player p = PersistentContainer.Instance.Players[str, false];
+							//if (p == null)
+							//{
+							//  continue;
+							//}
+							//count++;
+							//SdtdConsole.Instance.Output(count + ": " + p.EntityID + " - " + p.Name);
+						}
+						SdtdConsole.Instance.Output ("FriendsOf id=" + ci.entityId + ", friends=" + friends);
+					}
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in ListPlayersFriends.Run: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/MutePlayerChat.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/MutePlayerChat.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/MutePlayerChat.cs	(revision 273)
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using AllocsFixes.PersistentData;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class MutePlayerChat : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "mute a player on public chat";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Mute a player on public chat." +
+			"Usage:\n" +
+			"   mpc <steam id/player name/entity id> [true/false]\n" +
+			"If the optional parameter is not given the command will show the current status.";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "muteplayerchat", "mpc" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count < 1 || _params.Count > 2) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 1 or 2, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					return;
+				}
+
+				string steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
+				if (steamid == null) {
+					SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+					return;
+				}
+
+				Player p = PersistentContainer.Instance.Players [steamid, false];
+				if (p == null) {
+					SdtdConsole.Instance.Output ("Player not found.");
+					return;
+				}
+
+				if (_params.Count > 1) {
+					bool mute = false;
+					if (_params [1].ToLower () == "true") {
+						mute = true;
+					} else if (_params [1].ToLower () == "false") {
+						mute = false;
+					} else {
+						SdtdConsole.Instance.Output ("Wrong param 2. It must be \"true\" or \"false\"");
+						return;
+					}
+					p.IsChatMuted = mute;
+				}
+				SdtdConsole.Instance.Output (p.Name + " " + (p.IsChatMuted ? "muted" : "unmuted"));
+
+			} catch (Exception e) {
+				Log.Out ("Error in MutePlayerChat: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/Physics.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/Physics.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/Physics.cs	(revision 273)
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class Physics : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "Enable / Disable Physics on blocks that you are placing/removing";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Enable / Disable Physics on blocks that you are placing/removing";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "physics", "py" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				GameManager.bPhysicsActive = !GameManager.bPhysicsActive;
+				SdtdConsole.Instance.Output ("Physics enabled: " + GameManager.bPhysicsActive);
+			} catch (Exception e) {
+				Log.Out ("Error in Physics.Run: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/PlayerChatMaxLength.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/PlayerChatMaxLength.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/PlayerChatMaxLength.cs	(revision 273)
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using AllocsFixes.PersistentData;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class PlayerChatMaxLength : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "set the maximum number of characters a player can write in a single message";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Set the maximum number of characters a player can write in a single message." +
+			"Usage:\n" +
+			"   pcml <steam id/player name/entity id> <chat length>\n";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "playerchatmaxlength", "pcml" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count != 2) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 2, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					return;
+				}
+
+				string steamid = PersistentContainer.Instance.Players.GetSteamID (_params [0], true);
+				if (steamid == null) {
+					SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+					return;
+				}
+
+				int maxLen = int.MinValue;
+				int.TryParse (_params [1], out maxLen);
+
+				if (maxLen == int.MinValue || maxLen < 1) {
+					SdtdConsole.Instance.Output ("the parameter \"chat length\" must be an integer equal or greater than 1");
+					return;
+				}
+
+
+				Player p = PersistentContainer.Instance.Players [steamid, false];
+				if (p != null) {
+					p.MaxChatLength  = maxLen;
+					SdtdConsole.Instance.Output (p.Name + ": max chat length changed to " + maxLen);
+				}
+
+			} catch (Exception e) {
+				Log.Out ("Error in PlayerChatMaxLength: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/SayToPlayer2.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/SayToPlayer2.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/SayToPlayer2.cs	(revision 273)
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class SayToPlayer2 : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "send a message to a single player with a specific sender name";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Usage:\n" +
+			"   pm2 <sender player name / steam id / entity id> <receiver player name / steam id / entity id> <message>\n" +
+			"Send a PM from a player to another player, both given by the player name or steam / entity id (as given by e.g. \"lpi\").";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "sayplayer2", "pm2" };
+		}
+
+		private void RunInternal (ClientInfo _sender, List<string> _params)
+		{
+			if (_params.Count < 3) {
+				SdtdConsole.Instance.Output ("Usage: sayplayer2 <playername|entityid> <playername|entityid> <message>");
+				return;
+			}
+
+			string message = _params [2];
+			ClientInfo sender = ConsoleHelper.ParseParamIdOrName (_params [0]);
+			ClientInfo receiver = ConsoleHelper.ParseParamIdOrName (_params [1]);
+
+			if (sender != null && receiver != null) {
+				AllocsFixes.CustomCommands.Chat.SendMessage (receiver, sender, message);
+			} else {
+				SdtdConsole.Instance.Output ("Playername / SteamID / entity id of either sender or receiver not found.");
+			}
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_senderInfo.RemoteClientInfo != null) {
+					RunInternal (_senderInfo.RemoteClientInfo, _params);
+				} else {
+					RunInternal (null, _params);
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in SayToPlayer2.Run: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/SpawnHorde.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/SpawnHorde.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/SpawnHorde.cs	(revision 273)
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class SpawnHorde : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "spawn horde near a player or coordinate";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Spawn horde near a player." +
+			"Usage:\n" +
+			"   sh <steam id/player name/entity id>\n" +
+			"or" +
+			"   sh <x> <y> <z>\n";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "spawnhorde", "sh" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count != 1 && _params.Count != 3) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 1 or 3, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					return;
+				}
+
+				Vector3 pos = new Vector3 ();
+				int x = int.MinValue;
+				int y = int.MinValue;
+				int z = int.MinValue;
+
+				if (_params.Count == 1) {
+					ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (_params [0]);
+					if (ci1 == null) {
+						SdtdConsole.Instance.Output ("Playername or entity/steam id not found.");
+						return;
+					}
+					EntityPlayer ep1 = GameManager.Instance.World.Players.dict [ci1.entityId];
+					pos = ep1.GetPosition ();
+				} else if (_params.Count == 3) {
+					int.TryParse (_params [0], out x);
+					int.TryParse (_params [1], out y);
+					int.TryParse (_params [2], out z);
+
+					if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
+						SdtdConsole.Instance.Output ("x:" + x);
+						SdtdConsole.Instance.Output ("y:" + y);
+						SdtdConsole.Instance.Output ("z:" + z);
+						SdtdConsole.Instance.Output ("At least one of the given coordinates is not a valid integer");
+						return;
+					}
+
+					pos = new Vector3 ((float)x, (float)y, (float)z);
+				}
+                
+				AIDirectorChunkEventComponent chunkComponent = GameManager.Instance.World.aiDirector.GetComponent<AIDirectorChunkEventComponent> ();
+				if (chunkComponent == null) {
+					SdtdConsole.Instance.Output ("No AIDirectorChunkEventComponent Component found");
+					return;
+				}
+
+				chunkComponent.CreateHorde (pos);
+				SdtdConsole.Instance.Output ("Horde spawning at " + pos.x + ", " + pos.y + ", " + pos.z);
+
+			} catch (Exception e) {
+				Log.Out ("Error in SpawnHorde: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/SpawnMultipleEntity.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/SpawnMultipleEntity.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/SpawnMultipleEntity.cs	(revision 273)
@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class SpawnMultipleEntity : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "spawn multiple entities around some coordinate or player";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Spawn multiple entities around some coordinate. Type \"sme\" to see all entity types\n" +
+			"Usage:\n" +
+			"   sme <x> <y> <z> <spawn radius> @ [<list of entities>]\n" +
+			"or\n" +
+			"   sme <x> <z> <spawn radius> @ [<list of entities>]>\n" +
+			"or\n" +
+			"   sme <steam id/player name/entity id> <spawn radius> @ [<list of entities>]\n" +
+			"Example\n" +
+			"   sme -1520 860 15 @ 1 1 18 18 21 21 21\n";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "spawnmultipleentity", "sme" };
+		}
+
+		private void PrintEntities ()
+		{
+			SdtdConsole.Instance.Output ("The entities need to be in the list bellow:");
+			Dictionary<int, EntityClass>.KeyCollection entityTypesCollectionPrint = EntityClass.list.Keys;
+			int interationVal = 1;
+			foreach (int i in entityTypesCollectionPrint) {
+				EntityClass eClass = EntityClass.list [i];
+				if (!eClass.bAllowUserInstantiate) {
+					continue;
+				}
+				SdtdConsole.Instance.Output (" " + interationVal + " - " + eClass.entityClassName);
+				;
+				interationVal++;
+			}
+		}
+
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count < 2) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 3 or more, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					PrintEntities ();
+					return;
+				}
+				int paramType = 0;
+				for (int n = 0; n < _params.Count; n++) {
+					if (_params [n] == "@") {
+						if (n == 2 || n == 3 || n == 4) {
+							paramType = n;
+							break;
+						}
+					}
+				}
+				if (paramType == 0) {
+					SdtdConsole.Instance.Output ("Wrong pattern of arguments.");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					PrintEntities ();
+					return;
+				}
+
+				int x = int.MinValue;
+				int y = int.MinValue;
+				int z = int.MinValue;
+				int radius = int.MinValue;
+
+				if (paramType == 2) {
+					ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (_params [0]);
+					if (ci1 == null) {
+						SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+						return;
+					}
+					EntityPlayer ep1 = GameManager.Instance.World.Players.dict [ci1.entityId];
+					Vector3 pos = ep1.GetPosition ();
+					x = (int)pos.x;
+					y = (int)pos.y;
+					z = (int)pos.z;
+				} else if (paramType == 3 || paramType == 4) {
+					int.TryParse (_params [0], out x);
+					if (paramType == 3) {
+						y = 150;
+						int.TryParse (_params [1], out z);
+					} else if (paramType == 4) {
+						int.TryParse (_params [1], out y);
+						int.TryParse (_params [2], out z);
+					}
+				}
+				if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
+					SdtdConsole.Instance.Output ("x:" + x);
+					SdtdConsole.Instance.Output ("y:" + y);
+					SdtdConsole.Instance.Output ("z:" + z);
+					SdtdConsole.Instance.Output ("At least one of the given coordinates is not a valid integer");
+					return;
+				}
+
+				int.TryParse (_params [(paramType - 1)], out radius);
+				if (radius < 0) {
+					SdtdConsole.Instance.Output ("radius is not a valid integer. It must be an integer greater than 0.");
+					return;
+				}
+
+				Dictionary<int, EntityClass>.KeyCollection entityTypesCollection = EntityClass.list.Keys;
+				for (int n = (paramType + 1); n < _params.Count; n++) {
+					int type = 0;
+					int.TryParse (_params [n], out type);
+                    
+					int interationNum = 1;
+					bool result = false;
+                    
+					foreach (int i in entityTypesCollection) {
+						EntityClass eClass = EntityClass.list [i];
+						if (!eClass.bAllowUserInstantiate) {
+							continue;
+						}
+						if (interationNum == type) {
+							int realX, realY, realZ;
+							bool posFound = GameManager.Instance.World.FindRandomSpawnPointNearPosition (new Vector3 ((float)x, (float)y, (float)z), 15, out realX, out realY, out realZ, new Vector3 ((float)radius, (float)radius, (float)radius), true);
+							if (!posFound) {
+								posFound = GameManager.Instance.World.FindRandomSpawnPointNearPosition (new Vector3 ((float)x, (float)y, (float)z), 15, out realX, out realY, out realZ, new Vector3 ((float)radius, (float)150, (float)radius), true);
+							}
+							if (posFound) {
+								Entity entity = EntityFactory.CreateEntity (i, new Vector3 ((float)realX, (float)realY, (float)realZ));
+								GameManager.Instance.World.SpawnEntityInWorld (entity);
+								result = true;
+								SdtdConsole.Instance.Output ("Spawned " + eClass.entityClassName + " at " + realX + " " + realY + " " + realZ);
+							} else {
+								SdtdConsole.Instance.Output ("No spawn point found near coordinate " + x + " " + y + " " + z);
+								result = true;
+							}
+							break;
+						}
+						interationNum++;
+					}
+					if (!result) {
+						SdtdConsole.Instance.Output ("Ignoring the invalid entity [" + type + "]");
+					}
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in SpawnMultipleEntity: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/SpawnScouts.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/SpawnScouts.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/SpawnScouts.cs	(revision 273)
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class SpawnScouts : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "spawn scouts near a player or coordinate";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Spawn scouts near a player." +
+			"Usage:\n" +
+			"   ss <steam id/player name/entity id>\n" +
+			"or" +
+			"   ss <x> <y> <z>\n";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "spawnscouts", "ss" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count != 1 && _params.Count != 3) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 1 or 3, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" ");
+					SdtdConsole.Instance.Output (GetHelp ());
+					return;
+				}
+
+				Vector3 pos = new Vector3 ();
+				int x = int.MinValue;
+				int y = int.MinValue;
+				int z = int.MinValue;
+
+				if (_params.Count == 1) {
+					ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (_params [0]);
+					if (ci1 == null) {
+						SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+						return;
+					}
+					EntityPlayer ep1 = GameManager.Instance.World.Players.dict [ci1.entityId];
+					pos = ep1.GetPosition ();
+				} else if (_params.Count == 3) {
+					int.TryParse (_params [0], out x);
+					int.TryParse (_params [1], out y);
+					int.TryParse (_params [2], out z);
+
+					if (x == int.MinValue || y == int.MinValue || z == int.MinValue) {
+						SdtdConsole.Instance.Output ("x:" + x);
+						SdtdConsole.Instance.Output ("y:" + y);
+						SdtdConsole.Instance.Output ("z:" + z);
+						SdtdConsole.Instance.Output ("At least one of the given coordinates is not a valid integer");
+						return;
+					}
+
+					pos = new Vector3 ((float)x, (float)y, (float)z);
+				}
+                
+				AIDirectorChunkEventComponent chunkComponent = GameManager.Instance.World.aiDirector.GetComponent<AIDirectorChunkEventComponent> ();
+				if (chunkComponent == null) {
+					SdtdConsole.Instance.Output ("No AIDirectorChunkEventComponent Component found");
+					return;
+				}
+
+				chunkComponent.SpawnScouts (pos);
+				SdtdConsole.Instance.Output ("Scouts spawning at " + pos.x + ", " + pos.y + ", " + pos.z);
+
+			} catch (Exception e) {
+				Log.Out ("Error in SpawnScouts: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/TeleportPlayerHome.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/TeleportPlayerHome.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/TeleportPlayerHome.cs	(revision 273)
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class TeleportPlayerHome : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "teleport a player to his home (on bedroll)";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Usage:\n" +
+			"  teleportplayerhome <steam id / player name / entity id>";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "teleportplayerhome", "teleh" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count != 1) {
+					SdtdConsole.Instance.Output ("Usage: teleportplayerhome <entityid|playername|steamid>");
+				} else {
+					ClientInfo ci1 = ConsoleHelper.ParseParamIdOrName (_params [0]);
+					if (ci1 == null) {
+						SdtdConsole.Instance.Output ("Playername or entity/steamid id not found.");
+						return;
+					}
+					EntityPlayer ep1 = GameManager.Instance.World.Players.dict [ci1.entityId];
+					EntityBedrollPositionList bed = ep1.SpawnPoints;
+					if (bed.Count != 0) {
+						Vector3i pos = bed [0];
+						ep1.position.x = pos.x;
+						ep1.position.y = pos.y + 1;
+						ep1.position.z = pos.z;
+
+						NetPackageEntityTeleport pkg = new NetPackageEntityTeleport (ep1);
+						ci1.SendPackage (pkg);
+						SdtdConsole.Instance.Output ("Player teleported to his home at " + ep1.position.x + " " + ep1.position.y + " " + ep1.position.z);
+					} else {
+						SdtdConsole.Instance.Output ("The player does not have a defined HOME bed!");
+					}
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in TeleportPlayerHome.Run: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/ToogleChatCommandHide.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/ToogleChatCommandHide.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/ToogleChatCommandHide.cs	(revision 273)
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using AllocsFixes.PersistentData;
+using System.Threading;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class ToogleChatCommandHide : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "specify a chat message prefix that defines chat commands that are hidden from chat";
+		}
+
+		public override string GetHelp ()
+		{
+			return "If used chat messages starting with the defined prefix (e.g. \"/\") will not be shown to other players." +
+			"Usage:\n" +
+			"   tcch \n" +
+			"    - If used without any parameter this functionality is disabled" +
+			"   tcch <string pattern> \n" +
+			"    * do not use string pattern with spaces.\n" +
+			"    - define the prefix for chat commands\n" +
+			"   Example: tcch / \n" +
+			"    - Chat messages like \"/help\" will be hidden\n";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "tooglechatcommandhide", "tcch" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try {
+				if (_params.Count > 1) {
+					SdtdConsole.Instance.Output ("Wrong number of arguments, expected 1, found " + _params.Count + ".");
+					SdtdConsole.Instance.Output (" * Do not use string pattern with spaces.");
+					SdtdConsole.Instance.Output (GetHelp ());
+					return;
+				}
+
+				if (_params.Count == 0) {
+					PersistentContainer.Instance.Attributes.HideChatCommandPrefix = "";
+					PersistentContainer.Instance.Attributes.HideChatCommands = false;
+					SdtdConsole.Instance.Output ("Chat command hiding disabled");
+				} else {
+					PersistentContainer.Instance.Attributes.HideChatCommandPrefix = _params [0];
+					PersistentContainer.Instance.Attributes.HideChatCommands = true;
+					SdtdConsole.Instance.Output ("Prefix \"" + _params [0] + "\" defined for chat commands");
+				}
+			} catch (Exception e) {
+				Log.Out ("Error in ToogleChatCommandHide: " + e);
+			}
+		}
+	}
+}
Index: /binary-improvements/CoppisAdditions/src/Commands/UnlockAll.cs
===================================================================
--- /binary-improvements/CoppisAdditions/src/Commands/UnlockAll.cs	(revision 273)
+++ /binary-improvements/CoppisAdditions/src/Commands/UnlockAll.cs	(revision 273)
@@ -0,0 +1,89 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+namespace CoppisAdditions.CustomCommands
+{
+	public class UnlockAll : ConsoleCmdAbstract
+	{
+		public override string GetDescription ()
+		{
+			return "unlock all secure loots, chests and doors for the current player.";
+		}
+
+		public override string GetHelp ()
+		{
+			return "Unlock all secure loots, chests and doors for the current player. After using this command you need to leave and reenter the game to take effect.";
+		}
+
+		public override string[] GetCommands ()
+		{
+			return new string[] { "unlockall" };
+		}
+
+		public override void Execute (List<string> _params, CommandSenderInfo _senderInfo)
+		{
+			try { 
+				if (_senderInfo.RemoteClientInfo == null || _senderInfo.RemoteClientInfo.playerId == null || _senderInfo.RemoteClientInfo.playerId.Equals ("")) {
+					SdtdConsole.Instance.Output ("Unable to apply this command. You need be a player to execute it.");
+					return;
+				}
+				ClientInfo ci = ConsoleHelper.ParseParamIdOrName (_senderInfo.RemoteClientInfo.playerName);
+				ChunkClusterList chunklist = GameManager.Instance.World.ChunkClusters;
+				string SteamID = _senderInfo.RemoteClientInfo.playerId;
+				int lootsUnlocked = 0;
+				int doorsUnlocked = 0;
+				for (int i = 0; i < chunklist.Count; i++) {
+					ChunkCluster chunk = chunklist [i];
+					List<Chunk> clist = chunk.GetChunkArray ();
+					foreach (Chunk c in clist) {
+						DictionarySave<Vector3i, TileEntity> tiles = c.GetTileEntities ();
+						foreach (TileEntity tile in tiles.Values) {
+							TileEntityType type = tile.GetTileEntityType ();
+							try {
+								if (type.ToString ().Equals ("Campfile")) {
+									//TileEntityCampfire campfire = (TileEntityCampfire)tile;
+									//SdtdConsole.Instance.Output("campfire: " + );
+								} else if (type.ToString ().Equals ("Loot")) {
+									//TileEntityLootContainer loot = (TileEntityLootContainer) tile;
+
+								} else if (type.ToString ().Equals ("Forge")) {
+									//TileEntityForge forge = (TileEntityForge) tile;
+								} else if (type.ToString ().Equals ("SecureLoot")) {
+									TileEntitySecureLootContainer secureLoot = (TileEntitySecureLootContainer)tile;
+									//SdtdConsole.Instance.Output("secure loot ower: " + secureLoot.GetOwner());
+									List<string> users = secureLoot.GetUsers ();
+									if (!users.Contains (SteamID)) {
+										users.Add (SteamID);
+										lootsUnlocked = lootsUnlocked + 1;
+									}
+								} else if (type.ToString ().Equals ("SecureDoor")) {
+									TileEntitySecureDoor secureDoor = (TileEntitySecureDoor)tile;
+									List<string> users = secureDoor.GetUsers ();
+									if (!users.Contains (SteamID)) {
+										users.Add (SteamID);
+										doorsUnlocked = doorsUnlocked + 1;
+									}
+								}
+							} catch (Exception) {
+
+							}
+						}
+					}
+
+                    
+					if (ci != null) {
+						ci.SendPackage (new NetPackageChunkClusterInfo (chunk));
+					}
+				}
+				SdtdConsole.Instance.Output ("Secure Loots/Chest unlocked: " + lootsUnlocked);
+				SdtdConsole.Instance.Output ("Secure Doors unlocked: " + doorsUnlocked);
+				SdtdConsole.Instance.Output ("*Remember: you need to leave and enter again to apply this command on server`s map");
+			} catch (Exception e) {
+				Log.Out ("Error in UnlockAll.Run: " + e);
+			}
+
+		}
+	}
+}
Index: /binary-improvements/server-fixes.sln
===================================================================
--- /binary-improvements/server-fixes.sln	(revision 272)
+++ /binary-improvements/server-fixes.sln	(revision 273)
@@ -8,18 +8,33 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAndMapRendering", "MapRendering\WebAndMapRendering.csproj", "{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoppisAdditions", "CoppisAdditions\CoppisAdditions.csproj", "{771240CA-9B22-4AFE-A422-959E74B645B2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Release|Any CPU = Release|Any CPU
 		Release_Version|Any CPU = Release_Version|Any CPU
+		Debug|Any CPU = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Release_Version|Any CPU.ActiveCfg = Release|Any CPU
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Release_Version|Any CPU.Build.0 = Release|Any CPU
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{771240CA-9B22-4AFE-A422-959E74B645B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Debug|Any CPU.Build.0 = Release|Any CPU
 		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Release_Version|Any CPU.ActiveCfg = Release_Version|Any CPU
 		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Release_Version|Any CPU.Build.0 = Release_Version|Any CPU
 		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{81DA7F87-1A66-4920-AADA-6EAF1971F8D0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Debug|Any CPU.Build.0 = Release|Any CPU
 		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Release_Version|Any CPU.ActiveCfg = Release|Any CPU
 		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Release_Version|Any CPU.Build.0 = Release|Any CPU
 		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A1847B5F-7BFC-4BCD-94AA-A6C9FB7E7C54}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E273D042-57F9-4E2E-8268-5053527E5287}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+		{E273D042-57F9-4E2E-8268-5053527E5287}.Debug|Any CPU.Build.0 = Release|Any CPU
 		{E273D042-57F9-4E2E-8268-5053527E5287}.Release_Version|Any CPU.ActiveCfg = Release|Any CPU
 		{E273D042-57F9-4E2E-8268-5053527E5287}.Release_Version|Any CPU.Build.0 = Release|Any CPU
Index: /binary-improvements/server-fixes.userprefs
===================================================================
--- /binary-improvements/server-fixes.userprefs	(revision 272)
+++ /binary-improvements/server-fixes.userprefs	(revision 273)
@@ -1,20 +1,21 @@
 ﻿<Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release_Version" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="MapRendering/Web/Handlers/ItemIconHandler.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="CoppisAdditions/src/Commands/GiveXP.cs">
     <Files>
-      <File FileName="7dtd-server-fixes/ModInfo.xml" Line="1" Column="1" />
-      <File FileName="AllocsCommands/ModInfo.xml" Line="1" Column="1" />
-      <File FileName="MapRendering/ModInfo.xml" Line="7" Column="7" />
+      <File FileName="7dtd-server-fixes/ModInfo.xml" Line="20" Column="20" />
+      <File FileName="AllocsCommands/ModInfo.xml" Line="20" Column="20" />
+      <File FileName="MapRendering/ModInfo.xml" Line="21" Column="21" />
       <File FileName="MapRendering/Web/Web.cs" Line="1" Column="1" />
       <File FileName="MapRendering/Web/API/ExecuteConsoleCommand.cs" Line="1" Column="1" />
-      <File FileName="MapRendering/Web/LogBuffer.cs" Line="1" Column="1" />
-      <File FileName="MapRendering/Web/API/GetLog.cs" Line="1" Column="1" />
       <File FileName="MapRendering/Web/API/GetWebUIUpdates.cs" Line="1" Column="1" />
       <File FileName="MapRendering/Web/Handlers/ApiHandler.cs" Line="1" Column="1" />
       <File FileName="MapRendering/Commands/WebTokens.cs" Line="1" Column="1" />
-      <File FileName="AllocsCommands/Commands/TeleportPlayer.cs" Line="1" Column="1" />
-      <File FileName="MapRendering/Web/Handlers/ItemIconHandler.cs" Line="1" Column="1" />
-      <File FileName="AllocsCommands/Commands/ListLandProtection.cs" Line="5" Column="5" />
-      <File FileName="AllocsCommands/Commands/RemoveLandProtection.cs" Line="1" Column="1" />
+      <File FileName="MapRendering/API.cs" Line="1" Column="1" />
+      <File FileName="AllocsCommands/Commands/RepairChunkDensity.cs" Line="78" Column="78" />
+      <File FileName="7dtd-server-fixes/src/ChatHookExample.cs" Line="46" Column="46" />
+      <File FileName="AllocsCommands/Commands/Give.cs" Line="26" Column="26" />
+      <File FileName="7dtd-server-fixes/src/ItemList.cs" Line="17" Column="17" />
+      <File FileName="7dtd-server-fixes/src/StateManager.cs" Line="23" Column="23" />
+      <File FileName="CoppisAdditions/src/Commands/GiveXP.cs" Line="5" Column="5" />
     </Files>
   </MonoDevelop.Ide.Workbench>
