Index: binary-improvements/MapRendering/ModInfo.xml
===================================================================
--- binary-improvements/MapRendering/ModInfo.xml	(revision 299)
+++ binary-improvements/MapRendering/ModInfo.xml	(revision 306)
@@ -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="19" />
+		<Version value="20" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/ExecuteConsoleCommand.cs	(revision 306)
@@ -15,4 +15,9 @@
 				return;
 			}
+
+			WebCommandResult.ResultType responseType =
+				req.QueryString ["raw"] != null ? WebCommandResult.ResultType.Raw :
+				(req.QueryString ["simple"] != null ? WebCommandResult.ResultType.ResultOnly :
+					WebCommandResult.ResultType.Full);
 
 			string commandline = req.QueryString ["command"];
@@ -36,8 +41,6 @@
 			}
 
-			// TODO: Execute command (store resp as IConsoleConnection instance to deliver response to the single client?)
-
 			resp.SendChunked = true;
-			WebCommandResult wcr = new WebCommandResult (commandPart, argumentsPart, resp);
+			WebCommandResult wcr = new WebCommandResult (commandPart, argumentsPart, responseType, resp);
 			SdtdConsole.Instance.ExecuteAsync (commandline, wcr);
 		}
Index: binary-improvements/MapRendering/Web/API/GetAnimalsLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetAnimalsLocation.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/GetAnimalsLocation.cs	(revision 306)
@@ -9,10 +9,14 @@
     class GetAnimalsLocation : WebAPI
     {
+		private List<EntityAnimal> animals = new List<EntityAnimal> ();
+
         public override void HandleRequest(HttpListenerRequest req, HttpListenerResponse resp, WebConnection user, int permissionLevel)
         {
             JSONArray animalsJsResult = new JSONArray();
 
-            foreach (EntityAnimal entity in Animals.List)
-            {
+			Animals.Get (animals);
+			for (int i = 0; i < animals.Count; i++)
+			{
+				EntityAnimal entity = animals [i];
                 Vector3i position = new Vector3i(entity.GetPosition());
 
Index: binary-improvements/MapRendering/Web/API/GetHostileLocation.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetHostileLocation.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/GetHostileLocation.cs	(revision 306)
@@ -9,10 +9,14 @@
     class GetHostileLocation : WebAPI
     {
+		private List<EntityEnemy> enemies = new List<EntityEnemy> ();
+
         public override void HandleRequest(HttpListenerRequest req, HttpListenerResponse resp, WebConnection user, int permissionLevel)
         {
             JSONArray hostilesJsResult = new JSONArray();
 
-            foreach (EntityEnemy entity in Hostiles.List)
+			Hostiles.Get (enemies);
+			for (int i = 0; i < enemies.Count; i++)
             {
+				EntityEnemy entity = enemies [i];
                 Vector3i position = new Vector3i(entity.GetPosition());
 
Index: binary-improvements/MapRendering/Web/API/GetStats.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetStats.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/GetStats.cs	(revision 306)
@@ -21,6 +21,6 @@
 
 			result.Add ("players", new JSONNumber (GameManager.Instance.World.Players.Count));
-            result.Add ("hostiles", new JSONNumber (Hostiles.Count));
-            result.Add ("animals", new JSONNumber (Animals.Count));
+			result.Add ("hostiles", new JSONNumber (Hostiles.GetCount ()));
+			result.Add ("animals", new JSONNumber (Animals.GetCount ()));
 
 			WriteJSON (resp, result);
Index: binary-improvements/MapRendering/Web/API/GetWebUIUpdates.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/GetWebUIUpdates.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/GetWebUIUpdates.cs	(revision 306)
@@ -24,6 +24,6 @@
 
 			result.Add ("players", new JSONNumber (GameManager.Instance.World.Players.Count));
-            result.Add ("hostiles", new JSONNumber (Hostiles.Count));
-            result.Add ("animals", new JSONNumber (Animals.Count));
+			result.Add ("hostiles", new JSONNumber (Hostiles.GetCount ()));
+			result.Add ("animals", new JSONNumber (Animals.GetCount ()));
 
 			result.Add ("newlogs", new JSONNumber (LogBuffer.Instance.LatestLine - latestLine));
Index: binary-improvements/MapRendering/Web/API/WebAPI.cs
===================================================================
--- binary-improvements/MapRendering/Web/API/WebAPI.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/API/WebAPI.cs	(revision 306)
@@ -7,5 +7,5 @@
 	public abstract class WebAPI
 	{
-		public void WriteJSON (HttpListenerResponse resp, JSON.JSONNode root)
+		public static void WriteJSON (HttpListenerResponse resp, JSON.JSONNode root)
 		{
 			byte[] buf = Encoding.UTF8.GetBytes (root.ToString());
@@ -14,4 +14,13 @@
 			resp.ContentEncoding = Encoding.UTF8;
 			resp.OutputStream.Write (buf, 0, buf.Length);
+		}
+
+		public static void WriteText (HttpListenerResponse _resp, string _text)
+		{
+			byte[] buf = Encoding.UTF8.GetBytes (_text);
+			_resp.ContentLength64 = buf.Length;
+			_resp.ContentType = "text/plain";
+			_resp.ContentEncoding = Encoding.UTF8;
+			_resp.OutputStream.Write (buf, 0, buf.Length);
 		}
 
Index: binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs
===================================================================
--- binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs	(revision 306)
@@ -152,5 +152,5 @@
 
 		private void AddIcon (string _name, Texture2D _tex, Dictionary<string, List<Color>> _tintedIcons) {
-			icons.Add (_name + "__FFFFFF", _tex.EncodeToPNG ());
+			icons [_name + "__FFFFFF"] = _tex.EncodeToPNG ();
 
 			if (_tintedIcons.ContainsKey (_name)) {
@@ -166,5 +166,5 @@
 						}
 
-						icons.Add (tintedName, tintedTex.EncodeToPNG ());
+						icons [tintedName] = tintedTex.EncodeToPNG ();
 
 						UnityEngine.Object.Destroy (tintedTex);
Index: binary-improvements/MapRendering/Web/WebCommandResult.cs
===================================================================
--- binary-improvements/MapRendering/Web/WebCommandResult.cs	(revision 299)
+++ binary-improvements/MapRendering/Web/WebCommandResult.cs	(revision 306)
@@ -8,4 +8,5 @@
 using System.Net.Sockets;
 using System.Threading;
+using AllocsFixes.NetConnections.Servers.Web.API;
 
 namespace AllocsFixes.NetConnections.Servers.Web
@@ -13,4 +14,10 @@
 	public class WebCommandResult : IConsoleConnection
 	{
+		public enum ResultType {
+			Full,
+			ResultOnly,
+			Raw
+		}
+
 		public static int handlingCount = 0;
 		public static int currentHandlers = 0;
@@ -20,6 +27,7 @@
 		private string command;
 		private string parameters;
+		private ResultType responseType;
 
-		public WebCommandResult (string _command, string _parameters, HttpListenerResponse _response) {
+		public WebCommandResult (string _command, string _parameters, ResultType _responseType, HttpListenerResponse _response) {
 			Interlocked.Increment (ref handlingCount);
 			Interlocked.Increment (ref currentHandlers);
@@ -28,4 +36,5 @@
 			command = _command;
 			parameters = _parameters;
+			responseType = _responseType;
 		}
 
@@ -38,14 +47,24 @@
 			}
 
-			JSONObject result = new JSONObject ();
-
-			result.Add ("command", new JSONString (command));
-			result.Add ("parameters", new JSONString (parameters));
-			result.Add ("result", new JSONString (sb.ToString ()));
-
 			response.SendChunked = false;
 
 			try {
-				WriteJSON (response, result);
+				if (responseType == ResultType.Raw) {
+					WebAPI.WriteText (response, sb.ToString ());
+				} else {
+					JSONNode result;
+					if (responseType == ResultType.ResultOnly) {
+						result = new JSONString (sb.ToString ());
+					} else {
+						JSONObject resultObj = new JSONObject ();
+
+						resultObj.Add ("command", new JSONString (command));
+						resultObj.Add ("parameters", new JSONString (parameters));
+						resultObj.Add ("result", new JSONString (sb.ToString ()));
+
+						result = resultObj;
+					}
+					WebAPI.WriteJSON (response, result);
+				}
 			} catch (IOException e) {
 				if (e.InnerException is SocketException) {
@@ -62,17 +81,10 @@
 
 				msw.Stop ();
-				totalHandlingTime += msw.ElapsedMicroseconds;
-				Log.Out ("WebCommandResult.SendLines(): Took {0} µs", msw.ElapsedMicroseconds);
+				if (GamePrefs.GetInt (EnumGamePrefs.HideCommandExecutionLog) < 1) {
+					totalHandlingTime += msw.ElapsedMicroseconds;
+					Log.Out ("WebCommandResult.SendLines(): Took {0} µs", msw.ElapsedMicroseconds);
+				}
 				Interlocked.Decrement (ref currentHandlers);
 			}
-		}
-
-		public void WriteJSON (HttpListenerResponse resp, JSON.JSONNode root)
-		{
-			byte[] buf = Encoding.UTF8.GetBytes (root.ToString());
-			resp.ContentLength64 = buf.Length;
-			resp.ContentType = "application/json";
-			resp.ContentEncoding = Encoding.UTF8;
-			resp.OutputStream.Write (buf, 0, buf.Length);
 		}
 
