public static Condition load(final ConfigurationSection config, final Map<String, Integer> parameterIndexes) throws Exception
	{
		if (config == null)
			throw new IllegalArgumentException("ConfigurationSection cannot be NULL!");
		final String type = config.getString("type");
		if (type == null)
			throw new IllegalArgumentException("ConditionType cannot be NULL!");
		Class<?> clazz;
		try
		{
			clazz = Class.forName(type);
		}
		catch (final ClassNotFoundException e1)
		{
			throw new IllegalArgumentException("The Condition's Class " + type + " was not found! Please fix your configuration!");
		}
		if (!Condition.class.isAssignableFrom(clazz))
			throw new IllegalArgumentException("The Condition's Class " + clazz.getSimpleName() + " is no supported Condition! Please fix your configuration!");
		try
		{
			final Constructor<? extends Condition> constructor = clazz.asSubclass(Condition.class).getConstructor(ConfigurationSection.class, Map.class);
			return constructor.newInstance(config, parameterIndexes);
		}
		catch (final Exception e)
		{
			System.err.println("WARNING: Serious bug detected, please report this issue!");
			throw e;
		}
	}