public GameSelectorDialog(Frame parent) {
			super(parent, "Select the Players", true);
			this.player1 = null;
			this.player2 = null;
			Vector<String> possiblePlayers = new Vector<String>();
			for(Iterator<Class<? extends OthelloPlayer>> i = ClassCreator.getClassesOfType(OthelloPlayer.class).iterator(); i.hasNext();) {
				Class<? extends OthelloPlayer> c = i.next();
				if(!c.getName().equals("edu.drexel.cs.ai.othello.OthelloPlayer")) {
					possiblePlayers.add(c.getName());
					// 		    try {
					// 			possiblePlayers.addElement((OthelloPlayer)c.newInstance());
					// 		    } catch(Exception e) {
					// 			e.printStackTrace();
					// 		    }
				}
			}
			p1selector = new JComboBox(possiblePlayers);
			p2selector = new JComboBox(possiblePlayers);
			ActionListener al = new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent event) {
					JComboBox combo = (JComboBox)event.getSource();
					String newName = combo.getSelectedItem().toString();
					int i = newName.lastIndexOf('.');
					if(i >= 0 && i < newName.length()-1)
						newName = newName.substring(i+1);
					if(combo == p1selector) {
						if(p2name.getText().equals(newName))
							newName = newName + " (2)";
						p1name.setText(newName);
					} else {
						if(p1name.getText().equals(newName))
							newName = newName + " (2)";
						p2name.setText(newName);
					}
				}
			};
			p1selector.addActionListener(al);
			p2selector.addActionListener(al);

			JPanel selectorPanel = new JPanel();
			selectorPanel.setLayout(new BoxLayout(selectorPanel, BoxLayout.Y_AXIS));
			JPanel playerFields = new JPanel();

			JPanel player1 = new JPanel();
			player1.setBorder(new BevelBorder(BevelBorder.RAISED));
			player1.setLayout(new BoxLayout(player1, BoxLayout.Y_AXIS));
			player1.add(new JLabel("Player 1"));

			JPanel player2 = new JPanel();
			player2.setBorder(new BevelBorder(BevelBorder.RAISED));
			player2.setLayout(new BoxLayout(player2, BoxLayout.Y_AXIS));
			player2.add(new JLabel("Player 2"));

			JPanel p1form = new JPanel(new SpringLayout());
			p1form.add(new JLabel("Agent:", JLabel.TRAILING));
			p1form.add(p1selector);
			p1form.add(new JLabel("Name:", JLabel.TRAILING));
			p1name = new JTextField("Player 1");
			p1form.add(p1name);
			SpringUtilities.makeCompactGrid(p1form, 2, 2, 6,6,6,6);
			player1.add(p1form);

			JPanel p2form = new JPanel(new SpringLayout());
			p2form.add(new JLabel("Agent:", JLabel.TRAILING));
			p2form.add(p2selector);
			p2form.add(new JLabel("Name:", JLabel.TRAILING));
			p2name = new JTextField("Player 2");
			p2form.add(p2name);
			SpringUtilities.makeCompactGrid(p2form, 2, 2, 6,6,6,6);
			player2.add(p2form);

			p1selector.setSelectedIndex(p1selector.getSelectedIndex());
			p2selector.setSelectedIndex(p2selector.getSelectedIndex());
			
			okayButton = new JButton("Start");
			okayButton.addActionListener(this);
			okayButton.setDefaultCapable(true);
			
			addWindowListener(this);

			playerFields.add(player1);
			playerFields.add(player2);
			selectorPanel.add(playerFields);
			selectorPanel.add(okayButton);
			
			JScrollPane jsp = new JScrollPane(selectorPanel);
			add(jsp);
			getRootPane().setDefaultButton(okayButton);
			
			Dimension d = jsp.getPreferredSize();
			setSize(new Dimension((int)d.getWidth() + 25, (int)d.getHeight() + 25));
			setVisible(true);
		}