diff --git a/uk/ac/sanger/artemis/components/TransferAnnotationTool.java b/uk/ac/sanger/artemis/components/TransferAnnotationTool.java
index 83923de1cebdb99a9eaf29c48645f4563f2437b4..e7bd8cfda2ae24bef62e55e0f542d9ff13b5fa94 100644
--- a/uk/ac/sanger/artemis/components/TransferAnnotationTool.java
+++ b/uk/ac/sanger/artemis/components/TransferAnnotationTool.java
@@ -89,6 +89,7 @@ class TransferAnnotationTool extends JFrame
     "non_cytoplasm_location",
     "orthologous_to",
     "paralogous_to",
+    "pepstats_file",
     "PlasmoAP_score",
     "polypeptide_domain",
     "fasta_file",
@@ -180,38 +181,8 @@ class TransferAnnotationTool extends JFrame
     final QualifierVector qualifiers = feature.getQualifiers();
     for(int i = 0; i < qualifiers.size(); i++)
     {
-      Qualifier qualifier = ((Qualifier) qualifiers.get(i));
-
-      if(isNonTransferable(qualifier.getName()))
-          continue;
-
-      final JCheckBox qualifierNameCheckBox = new JCheckBox(qualifier.getName(), false);
-      c.gridx = 1;
-      Box qualifierValueBox = Box.createVerticalBox();
-      
-      JButton detailsShowHide = new JButton("+");
-      final Vector qualifierValuesCheckBox = setExpanderButton(detailsShowHide,
-          qualifier, qualifierValueBox, qualifierNameCheckBox, pane);
-      
-      qualifierNameCheckBox.addItemListener(new ItemListener()
-      {
-        public void itemStateChanged(ItemEvent e)
-        {
-          for(int i=0; i<qualifierValuesCheckBox.size(); i++)
-          {
-            JCheckBox cb = (JCheckBox) qualifierValuesCheckBox.get(i);
-            cb.setSelected(qualifierNameCheckBox.isSelected());
-          }
-        }        
-      });
-      pane.add(detailsShowHide, c);
-      c.gridx = 2;
-
-      pane.add(qualifierNameCheckBox, c);
-      qualifierCheckBoxes.put(qualifierNameCheckBox, qualifierValuesCheckBox);
-      c.gridy = ++nrows;
-      pane.add(qualifierValueBox, c);
-      c.gridy = ++nrows;
+      nrows = addQualifierComponents(pane, (Qualifier) qualifiers.get(i), 
+                                          qualifierCheckBoxes, c, nrows);
     }
 
     c.gridx = 0;
@@ -352,6 +323,55 @@ class TransferAnnotationTool extends JFrame
     framePanel.add(buttonBox, BorderLayout.SOUTH);
   }
   
+  
+  /**
+   * Add a qualifier to the list of transferable annotation
+   * @param pane
+   * @param qualifier
+   * @param qualifierCheckBoxes
+   * @param c
+   * @param nrows
+   * @return
+   */
+  private int addQualifierComponents(final JPanel pane,
+                                     final Qualifier qualifier, 
+                                     final Hashtable qualifierCheckBoxes,
+                                     final GridBagConstraints c,
+                                     int nrows)
+  {
+    if(isNonTransferable(qualifier.getName()))
+      return nrows;
+    
+    final JCheckBox qualifierNameCheckBox = new JCheckBox(qualifier.getName(), false);
+    c.gridx = 1;
+    Box qualifierValueBox = Box.createVerticalBox();
+    
+    JButton detailsShowHide = new JButton("+");
+    final Vector qualifierValuesCheckBox = setExpanderButton(detailsShowHide,
+        qualifier, qualifierValueBox, qualifierNameCheckBox, pane);
+    
+    qualifierNameCheckBox.addItemListener(new ItemListener()
+    {
+      public void itemStateChanged(ItemEvent e)
+      {
+        for(int i=0; i<qualifierValuesCheckBox.size(); i++)
+        {
+          JCheckBox cb = (JCheckBox) qualifierValuesCheckBox.get(i);
+          cb.setSelected(qualifierNameCheckBox.isSelected());
+        }
+      }        
+    });
+    pane.add(detailsShowHide, c);
+    c.gridx = 2;
+
+    pane.add(qualifierNameCheckBox, c);
+    qualifierCheckBoxes.put(qualifierNameCheckBox, qualifierValuesCheckBox);
+    c.gridy = ++nrows;
+    pane.add(qualifierValueBox, c);
+    c.gridy = ++nrows;
+    return nrows;
+  }
+  
   /**
    * Set up the expander button to display qualifier values.
    * @param butt - expander button
@@ -435,7 +455,6 @@ class TransferAnnotationTool extends JFrame
   		                          final boolean sameKey,
   		                          final boolean overwrite)
   {
-  	setCursor(new Cursor(Cursor.WAIT_CURSOR));
     // transfer selected annotation to genes
     final QualifierVector qualifiers = orginatingFeature.getQualifiers();
     final QualifierVector qualifiersToTransfer = new QualifierVector();
@@ -482,6 +501,16 @@ class TransferAnnotationTool extends JFrame
         "Warning", JOptionPane.WARNING_MESSAGE);
   	  return;
   	}
+  	else if(overwrite)
+  	{
+  	  int res = JOptionPane.showConfirmDialog(this, 
+  	      "Overwrite selected annotation for "+count+" feature(s)?", 
+  	      "Overwrite", JOptionPane.OK_CANCEL_OPTION);
+  	  if(res == JOptionPane.CANCEL_OPTION)
+  	    return;
+  	}
+  	
+  	setCursor(new Cursor(Cursor.WAIT_CURSOR));
   	
   	String geneNames[] = new String[count];
   	count = 0;
@@ -495,7 +524,6 @@ class TransferAnnotationTool extends JFrame
         count++;
       }
     }
-  	//geneNameTextArea.getText().split("\\s");
 
   	final String key = orginatingFeature.getKey().getKeyString();
   	final FeatureVector features = entryGroup.getAllFeatures();
@@ -510,56 +538,58 @@ class TransferAnnotationTool extends JFrame
   	//
   	// Commit changes to genes not in Artemis but in the database
   	//
-    DatabaseDocumentEntry db_entry = 
-    	(DatabaseDocumentEntry) orginatingFeature.getEntry().getEMBLEntry();
-    DatabaseDocument doc = (DatabaseDocument) db_entry.getDocument();
     Vector genesNotFound = null;
-    
-  	for (int i = 0; i < geneNames.length; i++)
+    if (orginatingFeature.getEntry().getEMBLEntry() instanceof DatabaseDocumentEntry)
     {
-      DatabaseDocumentEntry newDbEntry = GeneEdit.makeGeneEntry(null,
-          geneNames[i], doc, null);
+      DatabaseDocumentEntry db_entry =
+        (DatabaseDocumentEntry) orginatingFeature.getEntry().getEMBLEntry();
+      DatabaseDocument doc = (DatabaseDocument) db_entry.getDocument();
 
-      if (newDbEntry == null)
+      for (int i = 0; i < geneNames.length; i++)
       {
-        if (genesNotFound == null)
-          genesNotFound = new Vector();
-        genesNotFound.add(geneNames[i]);
-        continue;
-      }
+        DatabaseDocumentEntry newDbEntry = GeneEdit.makeGeneEntry(null,
+            geneNames[i], doc, null);
 
-      char[] c = new char[1];
-      PartialSequence ps = new PartialSequence(c, 100, 0, null, null);
-      newDbEntry.setPartialSequence(ps);
-      Entry entry = null;
-      try
-      {
-        entry = new Entry(newDbEntry);
-      }
-      catch (Exception e)
-      {
-        e.printStackTrace();
-      }
+        if (newDbEntry == null)
+        {
+          if (genesNotFound == null)
+            genesNotFound = new Vector();
+          genesNotFound.add(geneNames[i]);
+          continue;
+        }
 
-      SimpleEntryGroup entry_group = new SimpleEntryGroup();
-      entry_group.addElement(entry);
+        char[] c = new char[1];
+        PartialSequence ps = new PartialSequence(c, 100, 0, null, null);
+        newDbEntry.setPartialSequence(ps);
+        Entry entry = null;
+        try
+        {
+          entry = new Entry(newDbEntry);
+        }
+        catch (Exception e)
+        {
+          e.printStackTrace();
+        }
+
+        SimpleEntryGroup entry_group = new SimpleEntryGroup();
+        entry_group.addElement(entry);
 
-      ChadoTransactionManager ctm = new ChadoTransactionManager();
-      entry_group.addFeatureChangeListener(ctm);
-      entry_group.addEntryChangeListener(ctm);
-      ctm.setEntryGroup(entry_group);
+        ChadoTransactionManager ctm = new ChadoTransactionManager();
+        entry_group.addFeatureChangeListener(ctm);
+        entry_group.addEntryChangeListener(ctm);
+        ctm.setEntryGroup(entry_group);
 
-      transfer(entry.getAllFeatures(), qualifiersToTransfer, key, sameKey,
-          overwrite, true, geneNames);
-      ChadoTransactionManager.commit((DatabaseDocument) newDbEntry
-          .getDocument(), false, ctm);
+        transfer(entry.getAllFeatures(), qualifiersToTransfer, key, sameKey,
+            overwrite, true, geneNames);
+        ChadoTransactionManager.commit((DatabaseDocument) newDbEntry
+            .getDocument(), false, ctm);
 
-      entry_group.removeFeatureChangeListener(ctm);
-      entry_group.removeEntryChangeListener(ctm);
-      // if(newDbEntry != null)
-      // GeneEdit.showGeneEditor(null, geneNames[i], newDbEntry);
+        entry_group.removeFeatureChangeListener(ctm);
+        entry_group.removeEntryChangeListener(ctm);
+        // if(newDbEntry != null)
+        // GeneEdit.showGeneEditor(null, geneNames[i], newDbEntry);
+      }
     }
-  	
   	setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
   	
   	if(genesNotFound != null)
@@ -721,7 +751,7 @@ class TransferAnnotationTool extends JFrame
     public boolean testPredicate(Feature targetFeature)
     {
       String targetKey = targetFeature.getKey().getKeyString();
-      if (!sameKey || !targetKey.equals(key))
+      if (sameKey && !targetKey.equals(key))
         return false;
 
       Vector chadoNames = null;
@@ -745,7 +775,6 @@ class TransferAnnotationTool extends JFrame
       }
 
       String thisFeatureSystematicName = targetFeature.getSystematicName();
-
       for (int i = 0; i < geneNames.length; i++)
       {
         if(geneNames[i].equals(thisFeatureSystematicName) ||