Index: binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs
===================================================================
--- binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs	(revision 247)
+++ binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs	(revision 250)
@@ -4,4 +4,5 @@
 using System.IO;
 using System.Net;
+using System.Reflection;
 using System.Threading;
 
@@ -14,9 +15,14 @@
 		public ApiHandler (string staticPart, string moduleName = null) : base(moduleName) {
 			this.staticPart = staticPart;
-			addApi ("getlandclaims", new GetLandClaims ());
-			addApi ("getplayersonline", new GetPlayersOnline ());
-			addApi ("getplayerslocation", new GetPlayersLocation ());
-			addApi ("getplayerinventory", new GetPlayerInventory ());
-			addApi ("getstats", new GetStats ());
+
+			foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
+				if (!t.IsAbstract && t.IsSubclassOf (typeof(WebAPI))) {
+					ConstructorInfo ctor = t.GetConstructor (new Type[0]);
+					if (ctor != null) {
+						WebAPI apiInstance = (WebAPI)ctor.Invoke (new object[0]);
+						addApi (t.Name.ToLower (), apiInstance);
+					}
+				}
+			}
 		}
 
@@ -38,13 +44,14 @@
 			} else {
 				foreach (KeyValuePair<string, WebAPI> kvp in apis) {
-					try {
-						if (apiName.StartsWith (kvp.Key)) {
+					if (apiName.StartsWith (kvp.Key)) {
+						try {
 							kvp.Value.HandleRequest (req, resp, user, permissionLevel);
 							return;
+						} catch (Exception e) {
+							Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", kvp.Key);
+							Log.Exception (e);
+							resp.StatusCode = (int)HttpStatusCode.InternalServerError;
+							return;
 						}
-					} catch (Exception e) {
-						Log.Out ("Error in ApiHandler.HandleRequest(): Handler threw an exception: " + e);
-						resp.StatusCode = (int)HttpStatusCode.InternalServerError;
-						return;
 					}
 				}
