public Robot createRobotInstance(final ClassInfo info) throws IOException, ReflectiveOperationException {
		final PluginClassLoader loader = new PluginClassLoader(ClassLoader.getSystemClassLoader());
		final ClassOrigin origin = info.getOrigin();

		if(origin.inJar) {
			loader.defineJar(info);
		} else {
			Set<ClassInfo> depends = PluginService.getDependancies(info);
			for(ClassInfo dep : depends) {
				loader.defineClass(dep);
			}
		}
		
		loader.whitelist("roboflight.**");
		loader.whitelist("java.awt.Color");
		loader.whitelist("java.awt.Point");
		loader.whitelist("java.awt.Rectangle");
		loader.whitelist("java.awt.geom.**");
		loader.whitelist("java.io.**");
		loader.blacklist("java.io.Console");
		loader.blacklist("java.io.File");
		loader.blacklist("java.io.FileDescriptor");
		loader.blacklist("java.io.FileInputStream");
		loader.blacklist("java.io.FileOutputStream");
		loader.blacklist("java.io.FilePermission");
		loader.blacklist("java.io.FileReader");
		loader.blacklist("java.io.FileWriter");
		loader.blacklist("java.io.RandomAccessFile");
		loader.whitelist("java.lang.**");
		loader.blacklist("java.lang.SecurityManager");
		loader.blacklist("java.lang.Thread");
		loader.blacklist("java.lang.ThreadGroup");
		loader.blacklist("java.lang.ThreadLocal");
		loader.blacklist("java.lang.Runtime");
		loader.blacklist("java.lang.RuntimePermission");
		loader.blacklist("java.lang.ProcessBuilder");
		loader.blacklist("java.lang.Process");
		loader.blacklist("java.lang.System");
		loader.blacklist("java.lang.InheritableThreadLocal");
		loader.blacklist("java.lang.instrument.**");
		loader.blacklist("java.lang.invoke.**");
		loader.blacklist("java.lang.management.**");
		loader.blacklist("java.lang.ref.**");
		loader.blacklist("java.lang.reflect.**");
		loader.whitelist("java.math.**");
		loader.whitelist("java.util.**");
		loader.whitelist("java.util.concurrent.**");
		loader.blacklist("java.util.jar.**");
		loader.blacklist("java.util.logging.**");
		loader.blacklist("java.util.prefs.**");
		loader.blacklist("java.util.spi.**");
		loader.blacklist("java.util.zip.**");

		Class<?> robot = loader.loadClass(info.toString());

		return (Robot) robot.newInstance();
	}