public GUI() {
		setResizable(false);
		// Set the icon.
		icon = Toolkit.getDefaultToolkit().getImage(getClass().getResource("icon.png"));
		setIconImage(icon);
		
		// Boring stuff
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 400, 255);
		setLocationRelativeTo(null);
		contentPane = new JPanel(){
			private static final long serialVersionUID = 1L;
			// Override the JPanel's paintComponent to set the background image
			@Override
            protected void paintComponent(Graphics g) {
				background = Toolkit.getDefaultToolkit().getImage(getClass().getResource("background.jpg"));
                super.paintComponent(g);
                g.drawImage(background, 0, 0, null);
            }
        };
		contentPane.setBackground(Color.LIGHT_GRAY);
		contentPane.setBorder(null);
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		// Header label
		header = new JLabel("backup");
		header.setBackground(Color.LIGHT_GRAY);
		header.setBorder(new LineBorder(new Color(0, 0, 0)));
		header.setVerticalAlignment(SwingConstants.TOP);
		header.setHorizontalAlignment(SwingConstants.CENTER);
		header.setFont(new Font("Arial", Font.BOLD, 16));
		header.setForeground(Color.DARK_GRAY);
		header.setBounds(34, 11, 324, 21);
		contentPane.add(header);
		
		// Another label
		JLabel lblChooseADrive = new JLabel("choose a drive to backup:");
		lblChooseADrive.setBounds(34, 43, 324, 14);
		contentPane.add(lblChooseADrive);

		// This will get a neat little list of all hard drives on the system for use in the choice box below.
		File[] backupChoicesFiles = File.listRoots();
		String[] backupChoices = new String[backupChoicesFiles.length];
		for(int i = 0; i < backupChoicesFiles.length; i++){
			String volumeLabel = FileSystemView.getFileSystemView().getSystemDisplayName(backupChoicesFiles[i]);
			backupChoices[i] = volumeLabel;
		}
		// We don't want any blank choices >_>
		backupChoices = removeBlanks(backupChoices, "");
		
		// Our hard drive choices.
		backupChoiceBox.setBorder(new LineBorder(Color.BLACK));
		backupChoiceBox.setFocusable(false);
		backupChoiceBox.setEditable(false);
		backupChoiceBox.setFont(new Font("Arial", Font.PLAIN, 11));
		backupChoiceBox.setBackground(Color.LIGHT_GRAY);
		// Add the choices to the box
		for(String str : backupChoices){
			backupChoiceBox.addItem(str);	
		}
		backupChoiceBox.setBounds(34, 68, 324, 21);
		contentPane.add(backupChoiceBox);
		
		// Another label
		JLabel lblWhereDoYou = new JLabel("where do you want to back this drive up to?");
		lblWhereDoYou.setBounds(34, 100, 325, 14);
		contentPane.add(lblWhereDoYou);
		
		// This text field will hold the chosen backup destination
		outputFolder = new JTextField();
		outputFolder.setMargin(new Insets(5,5,5,5));
		outputFolder.setSelectionColor(Color.DARK_GRAY);
		outputFolder.setFocusable(false);
		outputFolder.setEditable(false);
		outputFolder.setBorder(new LineBorder(Color.DARK_GRAY));
		outputFolder.setBackground(Color.LIGHT_GRAY);
		outputFolder.setFont(new Font("Arial", Font.PLAIN, 11));
		outputFolder.setForeground(Color.DARK_GRAY);
		outputFolder.setBounds(34, 125, 212, 23);
		contentPane.add(outputFolder);
		outputFolder.setColumns(10);
		
		// Choose your destiny
		chooseFolder = new JButton("choose folder");
		chooseFolder.setFocusable(false);
		chooseFolder.setBackground(Color.LIGHT_GRAY);
		chooseFolder.setBorder(new LineBorder(new Color(0, 0, 0)));
		chooseFolder.setForeground(Color.DARK_GRAY);
		chooseFolder.setFont(new Font("Arial", Font.PLAIN, 10));
		chooseFolder.setBounds(258, 125, 100, 23);
		// When the user hits this button, create a file chooser.
		chooseFolder.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	// Set the UI of the file chooser to the system default. The java one is horrendous.
    			try {
					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
				} catch (Exception ex) {
					ex.printStackTrace();
				}
    			
    			// Let the user choose the backup destination folder.
            	JFileChooser chooser = new JFileChooser();
            	chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            	chooser.setApproveButtonText("Choose folder");
        	    int returnVal = chooser.showOpenDialog(getParent());
        	    if(returnVal == JFileChooser.APPROVE_OPTION) {
        	       outputFolder.setText(chooser.getSelectedFile().getPath());
        	    }
        	    
        	    // Set the UI back before we go, we only wanted to change it for the file chooser.
    			try {
					UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
				} catch (Exception ex) {
					ex.printStackTrace();
				}
            }
        });      
		contentPane.add(chooseFolder);
		
		// The button that will start a custom backup.
		customButton = new JButton("custom");
		customButton.setBorder(new LineBorder(new Color(0, 0, 0)));
		customButton.setFont(new Font("Arial", Font.PLAIN, 18));
		customButton.setForeground(Color.DARK_GRAY);
		customButton.setBackground(Color.LIGHT_GRAY);
		customButton.setBounds(34, 176, 100, 30);
		customButton.setFocusable(false);
		customButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
            	// When the user hits this button, prompt them for the settings they want.
            	if(!outputFolder.getText().isEmpty()){
					new Settings();
            	}
            }
        });      
		contentPane.add(customButton);
		
		// The button that will start a full backup.
		fullButton = new JButton("full");
		fullButton.setBorder(new LineBorder(new Color(0, 0, 0)));
		fullButton.setFont(new Font("Arial", Font.PLAIN, 18));
		fullButton.setBackground(Color.LIGHT_GRAY);
		fullButton.setForeground(Color.DARK_GRAY);
		fullButton.setBounds(146, 176, 100, 30);
		fullButton.setFocusable(false);
		fullButton.addActionListener(new ActionListener() {
			 
            public void actionPerformed(ActionEvent e)
            {
            	// No need for settings with a full backup, just start that shit.
            	if(!outputFolder.getText().isEmpty()){ // Still gotta make sure the destination folder isn't empty doe
            		startFullBackup();
            	}
            }
        });      
		contentPane.add(fullButton);
		
		// Cancel button!
		cancelButton = new JButton("cancel");
		cancelButton.setFocusable(false);
		cancelButton.setBorder(new LineBorder(new Color(0, 0, 0)));
		cancelButton.setForeground(Color.DARK_GRAY);
		cancelButton.setBackground(Color.LIGHT_GRAY);
		cancelButton.setFont(new Font("Arial", Font.PLAIN, 18));
		cancelButton.setBounds(258, 176, 100, 30);
		cancelButton.addActionListener(new ActionListener(){
			 public void actionPerformed(ActionEvent e){
				 // Decide what the cancel button should do
				 if(cancelButton.getText().equals("new")) Backup.refreshGUI();
				 else if(!Backup.backupInProgress) System.exit(0);
				 else BackupThread.backup.cancelTheBackup();
			 }
		});
		contentPane.add(cancelButton);
		
		// This label will give the user some notifications. Hidden until a backup is in progress
		progressLabel = new JLabel("");
		progressLabel.setForeground(Color.LIGHT_GRAY);
		progressLabel.setFont(new Font("Arial", Font.BOLD, 12));
		progressLabel.setHorizontalAlignment(SwingConstants.CENTER);
		progressLabel.setBorder(new LineBorder(new Color(0, 0, 0)));
		progressLabel.setBounds(34, 221, 324, 21);
		progressLabel.setVisible(false);
		contentPane.add(progressLabel);
		
		// Our progress bar. Hidden until a backup is in progress.
		progressBar = new JProgressBar();
		progressBar.setBorderPainted(false);
		progressBar.setForeground(GREEN);
		progressBar.setValue(0);
		progressBar.setBorder(new LineBorder(new Color(0, 0, 0)));
		progressBar.setBackground(Color.GRAY);
		progressBar.setBounds(34, 253, 324, 30);
		progressBar.setStringPainted(true);
		progressBar.setIndeterminate(true);
		progressBar.setVisible(false);
		contentPane.add(progressBar);
	}