diff --git a/uk/ac/sanger/artemis/components/RunMenu.java b/uk/ac/sanger/artemis/components/RunMenu.java
index 8a6760af32b52ee0169c253ae5448e1e5f98fd69..a0cbf87db6d83fb6a257ee879496edafc2679db5 100644
--- a/uk/ac/sanger/artemis/components/RunMenu.java
+++ b/uk/ac/sanger/artemis/components/RunMenu.java
@@ -20,7 +20,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/RunMenu.java,v 1.9 2007-02-28 15:47:56 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/RunMenu.java,v 1.10 2008-07-24 13:49:00 tjc Exp $
  **/
 
 package uk.ac.sanger.artemis.components;
@@ -31,15 +31,19 @@ import uk.ac.sanger.artemis.io.EntryInformationException;
 import uk.ac.sanger.artemis.io.InvalidKeyException;
 
 import java.io.IOException;
+import java.util.Hashtable;
 import java.awt.event.*;
 
-import javax.swing.*;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
 
 /**
  *  A JMenu of external commands/functions.
  *
  *  @author Kim Rutherford
- *  @version $Id: RunMenu.java,v 1.9 2007-02-28 15:47:56 tjc Exp $
+ *  @version $Id: RunMenu.java,v 1.10 2008-07-24 13:49:00 tjc Exp $
  **/
 
 public class RunMenu extends SelectionMenu 
@@ -49,8 +53,8 @@ public class RunMenu extends SelectionMenu
   private static final long serialVersionUID = 1L;
   private JMenu fastaMenu = null;
   private JMenu fastaMenuOptions = null;
-  private JMenu blastpMenu = null;
-  private JMenu blastpMenuOptions = null;
+  private Hashtable blastMenu = null;
+  private Hashtable blastMenuOptions = null;
 
   /**
    *  Create a new RunMenu object.
@@ -78,34 +82,6 @@ public class RunMenu extends SelectionMenu
 
     for(int i = 0; i < external_programs_size; ++i) 
       makeOptionsMenuItem(external_programs.elementAt(i));
-
-//  if(Options.getOptions().getProperty("jcon_min_jobs") != null) 
-//  {
-//    addSeparator();
-//    final JMenuItem jcon_status = new JMenuItem("Show Job Status ...");
-
-//    jcon_status.addActionListener(new ActionListener() 
-//    {
-//      public void actionPerformed(ActionEvent event) 
-//      {
-//        try 
-//        {
-//          final int ids[] = getIds();
-//          TaskViewerFrame tvf = new TaskViewerFrame(ids);
-
-//          tvf.setSize(400, 600);
-//          tvf.setVisible(true);
-//        }
-//        catch(Exception e) 
-//        {
-//          e.printStackTrace();
-//          new MessageDialog(frame, "unable to view job status: " + e);
-//        }
-//      }
-//    });
-
-//    add(jcon_status);
-//  }
   }
 
   /**
@@ -140,7 +116,7 @@ public class RunMenu extends SelectionMenu
       if(options_string.length() > 0) 
       {
         if(program_name.startsWith("fasta") ||
-           program_name.startsWith("blastp"))
+           program_name.indexOf("blast")>-1)
           new_menu = new JMenuItem(options_string);
         else 
           new_menu = new JMenuItem("Run " + program_name + " (" +
@@ -225,14 +201,21 @@ public class RunMenu extends SelectionMenu
       }
       fastaMenu.add(new_menu);
     }
-    else if(program.getName().startsWith("blastp"))
+    else if(program.getName().indexOf("blast")>-1)
     {
-      if(blastpMenu == null)
+      if(blastMenu == null)
+        blastMenu = new Hashtable();
+
+      if(!blastMenu.containsKey(program.getName()))
       {
-        blastpMenu = new JMenu("Run blastp on selected features against");
-        add(blastpMenu);
+        JMenu topMenu = new JMenu("Run "+program.getName()+
+                          " on selected features against");
+        blastMenu.put(program.getName(), topMenu);
+        add(topMenu);
       }
-      blastpMenu.add(new_menu);
+      
+      JMenu topMenu = (JMenu) blastMenu.get(program.getName());
+      topMenu.add(new_menu);
     }
     else
       add(new_menu);
@@ -261,15 +244,22 @@ public class RunMenu extends SelectionMenu
       new_options_menu = new JMenuItem(program.getProgramOptions());
       fastaMenuOptions.add(new_options_menu);
     }  
-    else if(program_name.startsWith("blastp"))
+    else if(program_name.indexOf("blast")>-1)
     {
-      if(blastpMenuOptions == null)
+      if(blastMenuOptions == null)
+        blastMenuOptions = new Hashtable();
+      
+      String menuStr = "Set " + program_name + " options";
+      if(!blastMenuOptions.containsKey(menuStr))
       {
-        blastpMenuOptions = new JMenu("Set " + program_name + " options");
-        add(blastpMenuOptions);
+        JMenu topMenu = new JMenu(menuStr);
+        blastMenuOptions.put(menuStr, topMenu);
+        add(topMenu);
       }
+      
+      JMenu topMenu = (JMenu) blastMenuOptions.get(menuStr);
       new_options_menu = new JMenuItem(program.getProgramOptions());
-      blastpMenuOptions.add(new_options_menu);
+      topMenu.add(new_options_menu);
     }
     else
     {
@@ -286,56 +276,4 @@ public class RunMenu extends SelectionMenu
     });
   }
 
-  /**
-   *  
-   **/
-//private int[] getIds() 
-//{
-//  final FeatureVector selected_features = getSelection().getAllFeatures();
-//  final Vector ids_vector = new Vector();
-
-//  for(int feature_index = 0; feature_index < selected_features.size();
-//      ++feature_index) 
-//  {
-//    final Feature this_feature = selected_features.elementAt(feature_index);
-
-//    try
-//    {
-//      final Qualifier job_qualifier =
-//        this_feature.getQualifierByName("job");
-//      
-//      final StringVector values = job_qualifier.getValues();
-
-//      if(values != null && values.size() > 0) 
-//      {
-//        for(int value_index=0; value_index<values.size();
-//            ++value_index) 
-//        {
-//          final String job_value = values.elementAt(value_index);
-//          final StringVector bits = StringVector.getStrings(job_value);
-
-//          if(bits.size() > 4 && bits.elementAt(2).equals("task:")) 
-//          {
-//            try 
-//            {
-//              final Integer task_id = Integer.valueOf(bits.elementAt(3));
-
-//              if(!ids_vector.contains(task_id)) 
-//                ids_vector.add(task_id);
-//            }
-//            catch(NumberFormatException e) {}
-//          }
-//        }
-//      }
-//    } 
-//    catch(InvalidRelationException e) {}
-//  }
-
-//  final int[] ids = new int[ids_vector.size()];
-
-//  for(int i=0 ; i<ids.length ; ++i) 
-//    ids[i] =((Integer)ids_vector.elementAt(i)).intValue();
-
-//  return ids;
-//}
 }