diff --git a/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java b/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java
index aa0b59c768566a443f81f1ec37c9b34dbe7837bb..28bf9045b002a530e5d4057ae126bbb539b1dc40 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/cv/CVPanel.java
@@ -39,6 +39,7 @@ import java.util.Vector;
 
 
 import javax.swing.Box;
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -933,13 +934,18 @@ public class CVPanel extends JPanel
   private Object promptKeyWord(final Box xBox, final String cv_name)
   {
     final String options[] = { "<PREV", "CANCEL", "NEXT>"};
-    final JTextField tfield = new JTextField(10);
+    final JTextField tfield = new JTextField(25);
     tfield.setSelectionStart(0);
     tfield.setSelectionEnd(tfield.getText().length());
     tfield.setSelectedTextColor(Color.blue);
     xBox.add(tfield);
     
-    int select = JOptionPane.showOptionDialog(null, xBox,
+    final Box yBox = Box.createVerticalBox();
+    yBox.add(xBox);
+    final JCheckBox ignoreCase = new JCheckBox("Ignore case",false);
+    yBox.add(ignoreCase);
+    
+    int select = JOptionPane.showOptionDialog(null, yBox,
         "keyword term selection",
          JOptionPane.YES_NO_CANCEL_OPTION,
          JOptionPane.QUESTION_MESSAGE,
@@ -958,7 +964,8 @@ public class CVPanel extends JPanel
     xBox.remove(tfield);
     
     logger4j.debug("CvTerm cache lookup: "+tfield.getText().trim()+" from "+cv_name);
-    return DatabaseDocument.getCvterms(tfield.getText().trim(), cv_name);
+    return DatabaseDocument.getCvterms(tfield.getText().trim(), 
+                             cv_name, ignoreCase.isSelected());
   }
   
   /**
diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index f639fafa3c9c8f71045df645f2e4cbf14cfc4109..d26871381617b43bec3f9bc89acbb24866e7a09c 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -1859,7 +1859,7 @@ public class DatabaseDocument extends Document
       getCvterms(getDAOOnly());
     }
     
-    return getCvterms("", cvName);
+    return getCvterms("", cvName, false);
   }
   
   public List getDatabaseNames()
@@ -1893,7 +1893,9 @@ public class DatabaseDocument extends Document
     return organismNames;
   }
   
-  public static Vector getCvterms(final String search_str, final String cv_name)
+  public static Vector getCvterms(final String search_str, 
+                                  final String cv_name,
+                                  final boolean ignoreCase)
   {
     final Vector cvterm_match = new Vector();
     
@@ -1905,16 +1907,43 @@ public class DatabaseDocument extends Document
       
       if(cvterm.getCv().getName().startsWith(cv_name))
       {
-        if(cvterm.getName().indexOf(search_str) > -1)
-          cvterm_match.add(cvterm);
+        if(ignoreCase)
+        {
+          if(indexOfIgnoreCase(cvterm.getName(),search_str,0) > -1)
+            cvterm_match.add(cvterm);
+        }
+        else
+        {
+          if(cvterm.getName().indexOf(search_str) > -1)
+            cvterm_match.add(cvterm);
+        }
       }
     }
-    
     return cvterm_match;
   }
   
+  /**
+   * Similar to <code>String.indexOf(String, int)</code>, but it ignores
+   * case
+   */
+   private static int indexOfIgnoreCase(String textToSearch, 
+                                        String pattern,
+                                        int fromIndex)
+  {
+    int n = pattern.length();
+    while(textToSearch.length() > ((fromIndex + n) - 1))
+    {
+      if(textToSearch.regionMatches(true, fromIndex, pattern, 0, n))
+        return fromIndex;
+      fromIndex++;
+    }
+    return -1;
+  }
+
+  
   /**
    * Get a list of the CV names
+   * 
    * @return
    */
   public static List getCvControledCurationNames()