Index: /trunk/gli/src/org/greenstone/gatherer/cdm/ClassifierManager.java
===================================================================
--- /trunk/gli/src/org/greenstone/gatherer/cdm/ClassifierManager.java	(revision 4637)
+++ /trunk/gli/src/org/greenstone/gatherer/cdm/ClassifierManager.java	(revision 4638)
@@ -70,4 +70,5 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
@@ -742,12 +743,13 @@
 		classifier_model.add(((Classifier)classifiers[i]).getName());
 	    }
-				// Now we add custom classifiers.
+	    // Now we add custom classifiers.
 	    addCustomClassifiers(classifier_model);
 	    Collections.sort(classifier_model);
-				// Create
+	    // Create
 	    add = new JButton(get("Add"));
 	    JPanel button_pane = new JPanel();
 	    JPanel central_pane = new JPanel();
 	    configure = new JButton(get("Configure"));
+	    configure.setEnabled(false);
 	    JPanel header_pane = new JPanel();
 	    instructions = new JTextArea(get("Instructions"));
@@ -761,4 +763,5 @@
 	    JLabel classifier_label = new JLabel(get("Classifier"));
 	    classifier_list = new JList(assigned);
+	    classifier_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 	    JLabel classifier_list_label = new JLabel(get("Assigned"));
 	    classifier_list_label.setHorizontalAlignment(JLabel.CENTER);
@@ -767,14 +770,16 @@
 	    JPanel classifier_pane = new JPanel();
 	    remove = new JButton(get("Remove"));
+	    remove.setEnabled(false);
 	    JLabel title = new JLabel(get("Title"));
 	    title.setHorizontalAlignment(JLabel.CENTER);
 	    title.setOpaque(true);
 	    JPanel temp = new JPanel(new BorderLayout());
-				// Listeners
+	    // Listeners
 	    add.addActionListener(new AddListener());
 	    configure.addActionListener(new ConfigureListener());
 	    remove.addActionListener(new RemoveListener());
 	    classifier_list.addMouseListener(new ClickListener());
-				// Layout
+	    classifier_list.addListSelectionListener(new ListListener());
+	    // Layout
 	    title.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
 	    instructions.setBorder(BorderFactory.createEmptyBorder(2,5,2,5));
@@ -795,5 +800,5 @@
 	    button_pane.add(configure);
 	    button_pane.add(remove);
-				// Scope these mad bordering skillz.
+	    // Scope these mad bordering skillz.
 	    temp.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,0,5,0), BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(get("Controls")), BorderFactory.createEmptyBorder(2,2,2,2))));
 	    temp.add(classifier_pane, BorderLayout.NORTH);
@@ -829,6 +834,6 @@
 			*/
 	private void addCustomClassifiers(ArrayList classifier_model) {
-				//classifier_model.add("CustomAZList");
-				// Search for classifiers under the org.greenstone.gatherer.cdm.custom directory.
+	    //classifier_model.add("CustomAZList");
+	    // Search for classifiers under the org.greenstone.gatherer.cdm.custom directory.
 	    File custom_directory = new File(Utility.BASE_DIR + "classes" + File.separator + "org" + File.separator + "greenstone" + File.separator + "gatherer" + File.separator + "cdm" + File.separator + "custom");
 	    if(custom_directory.exists()) {
@@ -1002,4 +1007,20 @@
 	}
 
+	/** listens for changes in the list selection and enables the configure and remove buttons if there is a selection, disables them if there is no selection */
+	private class ListListener
+	    implements ListSelectionListener {
+
+	    public void valueChanged(ListSelectionEvent e) {
+		if (!e.getValueIsAdjusting()) { // we get two events for one change in list selection - use the false one ( the second one) 
+		    if (classifier_list.isSelectionEmpty()) {
+			configure.setEnabled(false);
+			remove.setEnabled(false);
+		    } else {
+			configure.setEnabled(true);
+			remove.setEnabled(true);
+		    }
+		}
+	    }
+	}
 	/** This class listens for actions upon the remove button in the controls, and if detected calls the removeClassifier() method.
 			*/
Index: /trunk/gli/src/org/greenstone/gatherer/cdm/PlugInManager.java
===================================================================
--- /trunk/gli/src/org/greenstone/gatherer/cdm/PlugInManager.java	(revision 4637)
+++ /trunk/gli/src/org/greenstone/gatherer/cdm/PlugInManager.java	(revision 4638)
@@ -669,4 +669,5 @@
 	    central_pane = new JPanel();
 	    configure = new JButton(get("Configure"));
+	    configure.setEnabled(false);
 	    configure.setMnemonic(KeyEvent.VK_C);
 	    header_pane = new JPanel();
@@ -715,9 +716,10 @@
 	    movement_pane = new JPanel();
 	    plugin = new JComboBox(available);
-				//plugin.setEditable(true);
+	    //plugin.setEditable(true);
 	    plugin.setSelectedIndex(0);
 	    plugin_label = new JLabel(get("PlugIn"));
 	    plugin_list = new JList(assigned);
 	    plugin_list.setCellRenderer(new ListRenderer());
+	    plugin_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 	    plugin_list_label = new JLabel(get("Assigned"));
 	    plugin_list_label.setHorizontalAlignment(JLabel.CENTER);
@@ -726,9 +728,10 @@
 	    plugin_pane = new JPanel();
 	    remove = new JButton(get("Remove"));
+	    remove.setEnabled(false);
 	    remove.setMnemonic(KeyEvent.VK_R);
 	    title = new JLabel(get("Title"));
 	    title.setHorizontalAlignment(JLabel.CENTER);
 	    title.setOpaque(true);
-				// Listeners
+	    // Listeners
 	    add.addActionListener(new AddListener());
 	    configure.addActionListener(new ConfigureListener());
@@ -740,5 +743,6 @@
 	    remove.addActionListener(new RemoveListener());
 	    plugin_list.addMouseListener(new ClickListener());
-				// Layout
+	    plugin_list.addListSelectionListener(new ListListener());
+	    // Layout
 	    title.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
 
@@ -907,4 +911,22 @@
 	    }
 	}
+
+	/** listens for changes in the list selection and enables the configure and remove buttons if there is a selection, disables them if there is no selection */
+	private class ListListener
+	    implements ListSelectionListener {
+
+	    public void valueChanged(ListSelectionEvent e) {
+		if (!e.getValueIsAdjusting()) { // we get two events for one change in list selection - use the false one ( the second one) 
+		    if (plugin_list.isSelectionEmpty()) {
+			configure.setEnabled(false);
+			remove.setEnabled(false);
+		    } else {
+			configure.setEnabled(true);
+			remove.setEnabled(true);
+		    }
+		}
+	    }
+	}
+
 	/** Listens for actions apon the move buttons in the manager controls, and if detected calls the <i>movePlugIn()</i> method of the manager with the appropriate details. */
 	private class MoveListener
