@SuppressWarnings({ "rawtypes", "unchecked" })
	private void initialise() {
		pasteFrame = new JFrame();
		pasteFrame.setIconImage(PasteGui.pasteImage);
		pasteFrame.addWindowListener(new WindowListener() {
			public void windowActivated(WindowEvent arg0) {
			}

			public void windowClosed(WindowEvent arg0) {
				SystemTray.getSystemTray().remove(icon);
			}

			public void windowClosing(WindowEvent arg0) {
			}

			public void windowDeactivated(WindowEvent arg0) {
			}

			public void windowDeiconified(WindowEvent arg0) {
			}

			public void windowIconified(WindowEvent arg0) {
				pasteFrame.setVisible(false);
			}

			public void windowOpened(WindowEvent arg0) {
			}

		});
		pasteFrame.setTitle("Speed Paste");
		pasteFrame.setBounds(100, 100, 513, 642);
		pasteFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pasteFrame.getContentPane().setLayout(new GridLayout(1, 0, 0, 0));
		pasteFrame.setPreferredSize(new Dimension(500, 200));
		JPanel pastePanel = new JPanel();
		pasteFrame.getContentPane().add(pastePanel);
		pastePanel.setLayout(new GridLayout(0, 1, 0, 0));
		pastePanel.setBorder(BorderFactory.createLoweredBevelBorder());
		JScrollPane scrollPane = new JScrollPane();
		pastePanel.add(scrollPane);

		final JEditorPane pasteText = new JEditorPane();
		scrollPane.setViewportView(pasteText);
		pasteText.setToolTipText("Enter text to send to paste site here");
		pasteText.setText("Enter paste text");
		pasteText.addMouseListener(new MouseListener() {

			public void mouseReleased(MouseEvent e) {

			}

			public void mousePressed(MouseEvent e) {

			}

			public void mouseExited(MouseEvent e) {

			}

			public void mouseEntered(MouseEvent e) {

			}

			public void mouseClicked(MouseEvent arg0) {
				if (pasteText.getText().equals("Enter paste text")) {
					pasteText.setText("");
				}
			}
		});
		JPanel optionsPanel = new JPanel();
		pasteFrame.getContentPane().add(optionsPanel);
		GridBagLayout gbl_optionsPanel = new GridBagLayout();
		gbl_optionsPanel.columnWidths = new int[] { 0, 0, 0, 0 };
		gbl_optionsPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 };
		gbl_optionsPanel.columnWeights = new double[] { 0.0, 1.0, 0.0,
				Double.MIN_VALUE };
		gbl_optionsPanel.rowWeights = new double[] { 0.0, 1.0, 0.0, 0.0,
				Double.MIN_VALUE };
		optionsPanel.setLayout(gbl_optionsPanel);

		final JComboBox comboBox = new JComboBox();
		final JPanel temp = new JPanel();
		comboBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String selected = comboBox.getSelectedItem().toString();
				for (PasteService serv : services) {
					ServiceInfo provider = serv.getClass().getAnnotation(
							ServiceInfo.class);
					if (provider == null) {
						continue;
					} else {
						if (provider.name().equals(selected)) {
							temp.removeAll();
							serv.addComps(temp);
							temp.updateUI();
							break;
						}
					}
				}
			}
		});
		comboBox.setModel(new DefaultComboBoxModel(services.toArray()));
		comboBox.setSelectedIndex(0);
		GridBagConstraints gbc_comboBox = new GridBagConstraints();
		gbc_comboBox.gridwidth = 3;
		gbc_comboBox.insets = new Insets(0, 0, 5, 0);
		gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBox.gridx = 0;
		gbc_comboBox.gridy = 0;
		optionsPanel.add(comboBox, gbc_comboBox);

		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1
				.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
		scrollPane_1
				.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
		gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
		gbc_scrollPane_1.gridwidth = 3;
		gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0);
		gbc_scrollPane_1.gridx = 0;
		gbc_scrollPane_1.gridy = 1;
		optionsPanel.add(scrollPane_1, gbc_scrollPane_1);

		JPanel panel = temp;
		scrollPane_1.setViewportView(panel);

		textField = new JTextField();
		GridBagConstraints gbc_textField = new GridBagConstraints();
		gbc_textField.gridwidth = 3;
		gbc_textField.insets = new Insets(0, 0, 5, 0);
		gbc_textField.fill = GridBagConstraints.HORIZONTAL;
		gbc_textField.gridx = 0;
		gbc_textField.gridy = 2;
		optionsPanel.add(textField, gbc_textField);
		textField.setColumns(10);

		JButton btnPaste = new JButton("Paste");
		btnPaste.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				String sel = comboBox.getSelectedItem().toString();
				for (PasteService serv : services) {
					if (serv.toString().equals(sel)) {
						final String url = serv.paste(pasteText.getText());
						serv.writeHistory(url, System.currentTimeMillis());
						textField.setText(url);

					}
				}
			}

		});
		JButton btnHistory = new JButton("History");
		btnHistory.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				String sel = comboBox.getSelectedItem().toString();
				for (PasteService serv : services) {
					if (serv.toString().equals(sel)) {
						new PasteHistoryDialog(serv);
					}
				}
			}
		});
		GridBagConstraints gbc_btnHistory = new GridBagConstraints();
		gbc_btnHistory.gridx = 0;
		gbc_btnHistory.gridy = 3;
		optionsPanel.add(btnHistory, gbc_btnHistory);
		GridBagConstraints gbc_btnPaste = new GridBagConstraints();
		gbc_btnPaste.gridx = 2;
		gbc_btnPaste.gridy = 3;
		optionsPanel.add(btnPaste, gbc_btnPaste);
		pasteFrame.setLocationRelativeTo(null);
		pasteFrame.pack();
		btnPaste.requestFocusInWindow();
	}