Index: binary-improvements2/MapRendering/Web/Handlers/ApiHandler.cs
===================================================================
--- binary-improvements2/MapRendering/Web/Handlers/ApiHandler.cs	(revision 387)
+++ binary-improvements2/MapRendering/Web/Handlers/ApiHandler.cs	(revision 389)
@@ -22,20 +22,19 @@
 			Object[] apiEmptyCtorArgs = { };
 			
-			foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
-				if (!t.IsAbstract && t.IsSubclassOf (typeof (AbsWebAPI))) {
-					ConstructorInfo ctor = t.GetConstructor (apiWithParentCtorTypes);
-					if (ctor != null) {
-						AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiWithParentCtorArgs);
-						addApi (apiInstance);
-						continue;
-					}
+			
+			ReflectionHelpers.FindTypesImplementingBase (typeof (AbsWebAPI), _type => {
+				ConstructorInfo ctor = _type.GetConstructor (apiWithParentCtorTypes);
+				if (ctor != null) {
+					AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiWithParentCtorArgs);
+					addApi (apiInstance);
+					return;
+				}
 					
-					ctor = t.GetConstructor (apiEmptyCtorTypes);
-					if (ctor != null) {
-						AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiEmptyCtorArgs);
-						addApi (apiInstance);
-					}
+				ctor = _type.GetConstructor (apiEmptyCtorTypes);
+				if (ctor != null) {
+					AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiEmptyCtorArgs);
+					addApi (apiInstance);
 				}
-			}
+			});
 
 			// Permissions that don't map to a real API
