Index: binary-improvements/MapRendering/API.cs
===================================================================
--- binary-improvements/MapRendering/API.cs	(revision 297)
+++ 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 297)
+++ 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 297)
+++ 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>
