public void run()
					{
						//get the table data
						final ArrayList<Episode> episodes = show.getAiredEpisodes();
						final Object[][] data = new Object[episodes.size()][5];
						for(int i=0; i<episodes.size(); ++i)
							data[i] = new Object[]{episodes.get(i).getSENumber(), episodes.get(i).title(), episodes.get(i).getDate()};

						//make a table from the data
						final JTable jt = new JTable(data, new String[]{"Episode Number", "Episode Title", "Date Aired"})
						{
							private static final long serialVersionUID = 1L;
							public boolean isCellEditable(int row, int column)
							{
								return false;
							}
						};
						//disable reordering
						jt.getTableHeader().setReorderingAllowed(false);
						//disable multiple selection
						jt.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
						//center text strings
						DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
						centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
						jt.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);
						jt.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
						jt.getColumnModel().getColumn(2).setCellRenderer(centerRenderer);
						//create a listener to construct a panel with episode information on row select
						jt.getSelectionModel().addListSelectionListener(new ListSelectionListener()
						{
							public void valueChanged(final ListSelectionEvent event)
							{
								if(!event.getValueIsAdjusting())
								{
									new Thread()
									{
										@SuppressWarnings("deprecation")
										public void run()
										{
											//quit another paneling operation if one exists
											if(paneler != null)
												paneler.stop();
											paneler = this;

											//show the loading panel
											popIn.removeAll();
											popIn.add(new JLabel(new ImageIcon(this.getClass().getResource("loading spinner.gif")), SwingConstants.CENTER));
											popIn.setVisible(true);
											popIn.revalidate();

											//create the text section
											final Episode episode = episodes.get(jt.getSelectedRow());
											JTextArea jta = new JTextArea(episode.getText());
											jta.setEditable(false);
											jta.setLineWrap(true);
											jta.setWrapStyleWord(true);

											//add the components
											popIn.removeAll();
											popIn.add(new JPanel()
											{
												private static final long serialVersionUID = 1L;
												private ImageIcon image = episode.getImage();
												protected void paintComponent(Graphics g) {
													super.paintComponent(g);
													if(image.getImage() != null)
													{
														int destinationWidth = new ImageIcon(this.getClass().getResource("loading spinner.gif")).getIconWidth(),
																destinationHeight = (int)(image.getIconHeight()/((double)image.getIconWidth()/(double)destinationWidth));

														setPreferredSize(new Dimension(destinationWidth, destinationHeight));
														g.drawImage(getScaledInstance(image, destinationWidth, destinationHeight), 0, 0, null);
														g.dispose();
														popIn.revalidate();
													}
													else
														setVisible(false);
												}
											}, BorderLayout.PAGE_START);
											popIn.add(new JScrollPane(jta), BorderLayout.CENTER);

											//revalidate to redraw/realign the panel
											popIn.revalidate();
										}
									}.start();
								}
							}
						});

						//create the select button
						JButton btnSelect = new JButton("Select Episode");
						btnSelect.addActionListener(new ActionListener()
						{
							public void actionPerformed(ActionEvent e)
							{
								for(int i=jt.getSelectedRow(); i<episodes.size(); ++i)
									episodes.get(i).setWatched(true);
								new Thread()
								{
									public void run()
									{
										ShowTracker.addShow(show);
									}
								}.start();
								manageShows();
							}
						});

						//add the contents to the pane
						pane.removeAll();
						pane.add(new JTextArea("Select the last episode you have seen:"), BorderLayout.PAGE_START);
						pane.add(new JScrollPane(jt), BorderLayout.CENTER);
						pane.add(popIn, BorderLayout.LINE_END);
						pane.add(btnSelect, BorderLayout.PAGE_END);
						pane.revalidate();
					}