Index: /binary-improvements/AllocsCommands/Commands/Give.cs
===================================================================
--- /binary-improvements/AllocsCommands/Commands/Give.cs	(revision 298)
+++ /binary-improvements/AllocsCommands/Commands/Give.cs	(revision 299)
@@ -68,5 +68,5 @@
 						for (int i = 0; i < iv.Attachments.Length; i++) {
 							ItemValue att = iv.Attachments[i];
-							if (att.HasQuality) {
+							if (att != null && att.HasQuality) {
 								att.Quality = quality;
 							}
@@ -77,5 +77,5 @@
 						for (int i = 0; i < iv.Parts.Length; i++) {
 							ItemValue part = iv.Parts[i];
-							if (part.HasQuality) {
+							if (part != null && part.HasQuality) {
 								part.Quality = quality;
 							}
Index: /binary-improvements/AllocsCommands/ModInfo.xml
===================================================================
--- /binary-improvements/AllocsCommands/ModInfo.xml	(revision 298)
+++ /binary-improvements/AllocsCommands/ModInfo.xml	(revision 299)
@@ -5,5 +5,5 @@
 		<Description value="Additional commands for server operation" />
 		<Author value="Christian 'Alloc' Illy" />
-		<Version value="11" />
+		<Version value="12" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/MapRendering/API.cs
===================================================================
--- /binary-improvements/MapRendering/API.cs	(revision 298)
+++ /binary-improvements/MapRendering/API.cs	(revision 299)
@@ -16,4 +16,8 @@
 		}
 
+		public override void GameShutdown () {
+			AllocsFixes.MapRendering.MapRendering.Shutdown ();
+		}
+
 		public override void CalcChunkColorsDone (Chunk _chunk) {
 			AllocsFixes.MapRendering.MapRendering.RenderSingleChunk (_chunk);
Index: /binary-improvements/MapRendering/MapRendering/MapRendering.cs
===================================================================
--- /binary-improvements/MapRendering/MapRendering/MapRendering.cs	(revision 298)
+++ /binary-improvements/MapRendering/MapRendering/MapRendering.cs	(revision 299)
@@ -25,9 +25,10 @@
 		private MapRenderBlockBuffer[] zoomLevelBuffers;
 		private Dictionary<Vector2i, Color32[]> dirtyChunks = new Dictionary<Vector2i, Color32[]> ();
-		private System.Timers.Timer chunkSaveTimer = new System.Timers.Timer (500);
 		private bool renderingFullMap = false;
 		public static bool renderingEnabled = true;
 		private MicroStopwatch msw = new MicroStopwatch ();
 		private AllocsFixes.FileCache.MapTileCache cache = new AllocsFixes.FileCache.MapTileCache (Constants.MAP_BLOCK_SIZE);
+		private float renderTimeout = float.MaxValue;
+		private Coroutine renderCoroutineRef;
 
 		public static AllocsFixes.FileCache.MapTileCache GetTileCache() {
@@ -51,6 +52,13 @@
 			}
 
-			chunkSaveTimer.AutoReset = false;
-			chunkSaveTimer.Elapsed += new System.Timers.ElapsedEventHandler (TimedRendering);
+			renderCoroutineRef = ThreadManager.StartCoroutine (renderCoroutine ());
+		}
+
+		public static void Shutdown ()
+		{
+			if (Instance.renderCoroutineRef != null) {
+				ThreadManager.StopCoroutine (Instance.renderCoroutineRef);
+				Instance.renderCoroutineRef = null;
+			}
 		}
 
@@ -75,6 +83,4 @@
 									Instance.dirtyChunks [cPos2] = realColors;
 									//Log.Out ("Add Dirty: " + cPos2);
-									Instance.chunkSaveTimer.Stop ();
-									Instance.chunkSaveTimer.Start ();
 								}
 							}
@@ -177,10 +183,15 @@
 		}
 
-		private void TimedRendering (object source, System.Timers.ElapsedEventArgs e)
-		{
-			lock (lockObject) {
-				RenderDirtyChunks ();
-				if (dirtyChunks.Count > 0)
-					Instance.chunkSaveTimer.Start ();
+		private System.Collections.IEnumerator renderCoroutine () {
+			while (true) {
+				lock (lockObject) {
+					if (dirtyChunks.Count > 0 && renderTimeout == float.MaxValue) {
+						renderTimeout = Time.time + 0.5f;
+					}
+					if (Time.time > renderTimeout || dirtyChunks.Count > 200) {
+						RenderDirtyChunks ();
+					}
+				}
+				yield return new WaitForSeconds (0.2f);
 			}
 		}
Index: /binary-improvements/MapRendering/ModInfo.xml
===================================================================
--- /binary-improvements/MapRendering/ModInfo.xml	(revision 298)
+++ /binary-improvements/MapRendering/ModInfo.xml	(revision 299)
@@ -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="18" />
+		<Version value="19" />
 		<Website value="http://7dtd.illy.bz" />
 	</ModInfo>
Index: /binary-improvements/server-fixes.sln
===================================================================
--- /binary-improvements/server-fixes.sln	(revision 298)
+++ /binary-improvements/server-fixes.sln	(revision 299)
@@ -8,6 +8,4 @@
 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
@@ -17,10 +15,4 @@
 	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
Index: /binary-improvements/server-fixes.userprefs
===================================================================
--- /binary-improvements/server-fixes.userprefs	(revision 298)
+++ /binary-improvements/server-fixes.userprefs	(revision 299)
@@ -1,21 +1,25 @@
 ﻿<Properties>
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Release_Version" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="CoppisAdditions/src/Commands/GiveXP.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="7dtd-server-fixes/src/ItemList.cs">
     <Files>
-      <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="7dtd-server-fixes/ModInfo.xml" Line="1" Column="1" />
+      <File FileName="AllocsCommands/ModInfo.xml" Line="21" Column="21" />
+      <File FileName="MapRendering/ModInfo.xml" Line="7" Column="7" />
       <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/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="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="MapRendering/Web/API/GetAllowedCommands.cs" Line="1" Column="1" />
+      <File FileName="MapRendering/Web/API/GetPlayerList.cs" Line="1" Column="1" />
+      <File FileName="AllocsCommands/Commands/ListKnownPlayers.cs" Line="1" Column="1" />
+      <File FileName="MapRendering/Web/API/GetHostileLocation.cs" Line="1" Column="1" />
+      <File FileName="7dtd-server-fixes/src/LiveData/Hostiles.cs" Line="1" Column="1" />
+      <File FileName="7dtd-server-fixes/src/PersistentData/Player.cs" Line="1" Column="1" />
+      <File FileName="MapRendering/Web/API/GetPlayersOnline.cs" Line="1" Column="1" />
+      <File FileName="AllocsCommands/Commands/Give.cs" Line="1" Column="1" />
+      <File FileName="MapRendering/Web/Handlers/ItemIconHandler.cs" Line="1" Column="1" />
+      <File FileName="AllocsCommands/Commands/ShowInventory.cs" Line="107" Column="107" />
       <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" />
+      <File FileName="7dtd-server-fixes/src/API.cs" Line="17" Column="17" />
     </Files>
   </MonoDevelop.Ide.Workbench>
Index: /binary-improvements/webserver/css/style.css
===================================================================
--- /binary-improvements/webserver/css/style.css	(revision 298)
+++ /binary-improvements/webserver/css/style.css	(revision 299)
@@ -135,4 +135,5 @@
 .adminnavbar #serverstats #stats_time {
 	white-space: nowrap;
+	border-bottom: 1px dashed orange;
 }
 
Index: /binary-improvements/webserver/js/stats.js
===================================================================
--- /binary-improvements/webserver/js/stats.js	(revision 298)
+++ /binary-improvements/webserver/js/stats.js	(revision 299)
@@ -1,16 +1,58 @@
+function DayName (days) {
+	var daynames = ["", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Bloodday"];
+	return daynames[DayOfWeek(days)];
+}
+
+function DayOfWeek (days) {
+	return days % 7 > 0 ? days % 7 : 7;
+}
+
+function GetDayStat (days) {
+	var daynames = ["", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Bloodday"];
+	var dayOfWeek = days % 7 > 0 ? days % 7 : 7;
+	var result = "";
+	// Show days til blood moon:
+	result += " (" + (7 - dayOfWeek) + " til blood moon)";
+	// Show day of week (number):
+	result += " (DoW: " + dayOfWeek + ")";
+	// Show day of week (name):
+	result += " (" + daynames[dayOfWeek] + ")";
+	return result;
+}
+
+function FormatServerTime (gametime) {
+	var time = "Day " + gametime.days;
+	time += " (" + DayName (gametime.days) + "), ";
+	if (gametime.hours < 10)
+		time += "0";
+	time += gametime.hours;
+	time += ":";
+	if (gametime.minutes < 10)
+		time += "0";
+	time += gametime.minutes;
+	return time;
+}
+
+function TimeTitle (gametime) {
+	var daynames = ["", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Bloodday"];
+	var dayOfWeek = DayOfWeek (gametime.days);
+	var result = "";
+	// Show days til blood moon:
+	result += (7 - dayOfWeek) + " days til blood moon\n";
+	// Show day of week (number):
+	result += "Day of week: " + dayOfWeek + "\n";
+	// Show day of week (name):
+	//result += daynames[dayOfWeek];
+	return result;
+}
+
 function StartStatsModule () {
 	var updateGameTimeEvent = function() {
 		$.getJSON( "../api/getstats")
 		.done(function(data) {
-			var time = "Day " + data.gametime.days + ", ";
-			if (data.gametime.hours < 10)
-				time += "0";
-			time += data.gametime.hours;
-			time += ":";
-			if (data.gametime.minutes < 10)
-				time += "0";
-			time += data.gametime.minutes;
+			var time = FormatServerTime (data.gametime);
 
 			$("#stats_time").html (time);
+			$("#stats_time").prop ("title", TimeTitle (data.gametime));
 			$("#stats_players").html (data.players);
 			$("#stats_hostiles").html (data.hostiles);
@@ -31,14 +73,8 @@
 		$.getJSON( "../api/getwebuiupdates?latestLine=" + lastLogLine)
 		.done(function(data) {
-			var time = "Day " + data.gametime.days + ", ";
-			if (data.gametime.hours < 10)
-				time += "0";
-			time += data.gametime.hours;
-			time += ":";
-			if (data.gametime.minutes < 10)
-				time += "0";
-			time += data.gametime.minutes;
+			var time = FormatServerTime (data.gametime);
 
 			$("#stats_time").html (time);
+			$("#stats_time").prop ("title", TimeTitle (data.gametime));
 			$("#stats_players").html (data.players);
 			$("#stats_hostiles").html (data.hostiles);
