public static Collection<Class<? extends Critter>> getAvailableCritterTypes() {
		if (availableCritterTypes == null) {
			availableCritterTypes = new ArrayList<Class<? extends Critter>>(0);

			String typePackageStr = System.getProperty("critters.typePackageName");
			String typeStr = System.getProperty("critters.availableCritterTypes");

			String[] types = DEFAULT_TYPES;
			String typePackage = DEFAULT_TYPE_PACKAGE;
			if (typeStr != null) {
				types = typeStr.split(",");
			}

			if (typeStr != null) {
				typePackage = typePackageStr;
			}
			for (String clazz : types) {
				String className = typePackage + "." + clazz;
				try {
					@SuppressWarnings("unchecked")
					Class<? extends Critter> c = (Class<? extends Critter>) Class.forName(className);

					availableCritterTypes.add(c);
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		return availableCritterTypes;
	}