public FTLFrame( int version ) {
		
		this.version = version;
		
		// GUI setup
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(800, 700);
		setLocationRelativeTo(null);
		setTitle( "FTL Profile Editor v" + version );
		try {
			setIconImage( ImageIO.read( ClassLoader.getSystemResource("unlock.png") ) );
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		linkListener = new HyperlinkListener() {
			public void hyperlinkUpdate(HyperlinkEvent e) {
				if ( e.getEventType() == HyperlinkEvent.EventType.ACTIVATED ) {
					log.trace( "Dialog link clicked: "+ e.getURL() );
					if ( Desktop.isDesktopSupported() ) {
						try {
							Desktop.getDesktop().browse( e.getURL().toURI() );
							log.trace( "Link opened in external browser" );
						} catch (Exception f) {
							log.error( "Unable to open link", f );
						}
					}
				}
			}
		};
		
		initCheckboxIcons();
		
		JPanel contentPane = new JPanel( new BorderLayout() );
		setContentPane(contentPane);
		
		JTabbedPane tasksPane = new JTabbedPane();
		contentPane.add( tasksPane, BorderLayout.CENTER );

		JPanel profilePane = new JPanel( new BorderLayout() );
		tasksPane.add( "Profile", profilePane );

		JToolBar profileToolbar = new JToolBar();
		setupProfileToolbar(profileToolbar);
		profilePane.add(profileToolbar, BorderLayout.NORTH);
		
		JTabbedPane profileTabsPane = new JTabbedPane();
		profilePane.add( profileTabsPane, BorderLayout.CENTER );

		shipUnlockPanel = new ShipUnlockPanel(this);
		generalAchievementsPanel = new GeneralAchievementsPanel(this);
		statsPanel = new ProfileStatsPanel(this);

		profileTabsPane.add( "Ship Unlocks & Achievements" , new JScrollPane( shipUnlockPanel ) );
		profileTabsPane.add( "General Achievements" , new JScrollPane( generalAchievementsPanel ) );
		profileTabsPane.add( "Stats" , new JScrollPane( statsPanel ) );

		
		JPanel savedGamePane = new JPanel( new BorderLayout() );
		tasksPane.add( "Saved Game", savedGamePane );

		JToolBar savedGameToolbar = new JToolBar();
		setupSavedGameToolbar(savedGameToolbar);
		savedGamePane.add(savedGameToolbar, BorderLayout.NORTH);

		JTabbedPane savedGameTabsPane = new JTabbedPane();
		savedGamePane.add( savedGameTabsPane, BorderLayout.CENTER );

		savedGameDumpPanel = new SavedGameDumpPanel(this);
		savedGameGeneralPanel = new SavedGameGeneralPanel(this);
		savedGameFloorplanPanel = new SavedGameFloorplanPanel(this);

		savedGameTabsPane.add( "Dump", savedGameDumpPanel);
		savedGameTabsPane.add( "General", new JScrollPane( savedGameGeneralPanel ) );
		savedGameTabsPane.add( "Ship", savedGameFloorplanPanel );


		JPanel statusPanel = new JPanel();
		statusPanel.setLayout( new BoxLayout(statusPanel, BoxLayout.Y_AXIS) );
		statusPanel.setBorder( BorderFactory.createLoweredBevelBorder() );
		statusLbl = new JLabel(" ");
		//statusLbl.setFont( statusLbl.getFont().deriveFont(Font.PLAIN) );
		statusLbl.setBorder( BorderFactory.createEmptyBorder(2, 4, 2, 4) );
		statusLbl.setAlignmentX( Component.LEFT_ALIGNMENT );
		statusPanel.add( statusLbl );
		contentPane.add( statusPanel, BorderLayout.SOUTH );

		// Load blank profile (sets Kestrel unlock)
		loadProfile( Profile.createEmptyProfile() );

		// Check for updates in a seperate thread.
		setStatusText( "Checking for updates..." );
		Thread t = new Thread("CheckVersion") {
			@Override
			public void run() {
				checkForUpdate();
			}
		};
		t.setDaemon(true);
		t.start();
	}