private void init()
	{
		savedir = getSaveDir();
		conffile = new File(savedir, "data.txt");
		qm = new QuestManager();
		fm = new FileManager();
		conf = new StringConfig();
		//Set LookAndFeel to Nimbus
		try {
			UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		//Load icon image
		try
		{
			Image icon = ImageIO.read(getClass().getClassLoader().getResource("res/icon.png"));
			if(icon != null)setIconImage(icon);
		}
		catch(IOException ioe)
		{
			System.out.println("Failed to load icon");
			ioe.printStackTrace();
		}
		//Take up half of the screen, centered
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setBounds((int)d.getWidth()/6, (int)d.getHeight()/6, (int)d.getWidth()*2/3, (int)d.getHeight()*2/3);
		//Set up stuff
		setTitle("SkyQuest Utility");
		setLayout(new BorderLayout());
		//Add components
		tabs = new JTabbedPane();
		main = new MainPanel(this);
		tabs.addTab("Home", main);
		quest = new QuestPanel(this);
		tabs.addTab("Quests", quest);
		tabs.setEnabledAt(1, false);
		add("Center", tabs);
		menu = new MenuBar(this);
		setJMenuBar(menu);
		//Listeners
		addWindowListener(this);
		//Workaround for getting System JFileChooser in Nimbus
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			fc = new JFileChooser();
			fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			fc.updateUI();
			UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
			refreshUI(fc, false);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//Load settings
		conf.setFile(conffile);
		try
		{
			loadSettings();
		}
		catch(IOException ioe)
		{
			ioe.printStackTrace();
		}
		quest.tabs.setPreferredSize(new Dimension(getWidth()/3, quest.tabs.getSize().height));
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		//Show
		setVisible(true);
	}