public void onEnable() {
		// Create any required directories
		getDataFolder().mkdirs();

		// Create/load configuration and customizable messages
		loadConfiguration();

		// Disable plugin if auto-disable is set to true and server is running in online-mode
		if (getConfig().getBoolean("main.auto-disable") && getServer().getOnlineMode()) {
			xAuthLog.info("Auto-disabling, server is running in online-mode");
			getServer().getPluginManager().disablePlugin(this);
			return;
		}

		if (getConfig().getBoolean("main.check-for-updates")) {
			Updater updater = new Updater(getDescription().getVersion());
			if (updater.isUpdateAvailable())
				updater.printMessage();
		}

		File h2File = new File("lib", "h2-" + h2Version + ".jar");
		if (!h2File.exists() && getConfig().getBoolean("main.download-library") && !getConfig().getBoolean("mysql.enabled")) {
			xAuthLog.info("-------------------------------");
			xAuthLog.info("Downloading required H2 library..");
			downloadLib(h2File);
			xAuthLog.info("Download complete.");
			xAuthLog.info("");
			xAuthLog.info("Reload the server to enable xAuth.");
			xAuthLog.info("-------------------------------");

			getServer().getPluginManager().disablePlugin(this);
			return;
		}

		// Initialize permissions support
		//xPermissions.init();

		// Initialize database controller
		dbCtrl = new DatabaseController(this);

		// Test connection to database
		if (!dbCtrl.isConnectable()) {
			xAuthLog.severe("Failed to establish " + dbCtrl.getDBMS() + " database connection!");

			// disable (for now, may change in the future)
			getServer().getPluginManager().disablePlugin(this);
			return;
		}

		xAuthLog.info("Successfully established connection to " + dbCtrl.getDBMS() + " database");
		dbCtrl.runUpdater();

		// Initialize ALL THE CLASSES
		plyrMngr	= new PlayerManager(this);
		plyrDtHndlr = new PlayerDataHandler(this);
		pwdHndlr 	= new PasswordHandler(this);
		locMngr 	= new LocationManager(this);
		strkMngr	= new StrikeManager(this);

		Player[] players = getServer().getOnlinePlayers();
		if (players.length > 0)
			plyrMngr.handleReload(players);

		// Initialize listeners
		new xAuthPlayerListener(this);
		new xAuthBlockListener(this);
		new xAuthEntityListener(this);

		// Register commands
		getCommand("register").setExecutor(new RegisterCommand(this));
		getCommand("login").setExecutor(new LoginCommand(this));
		getCommand("logout").setExecutor(new LogoutCommand(this));
		getCommand("changepw").setExecutor(new ChangePwdCommand(this));
		getCommand("xauth").setExecutor(new xAuthCommand(this));

		xAuthLog.info(String.format("v%s Enabled!", getDescription().getVersion()));
		lol();
	}