diff --git a/uk/ac/sanger/artemis/components/genebuilder/ortholog/OrthologPanel.java b/uk/ac/sanger/artemis/components/genebuilder/ortholog/OrthologPanel.java
index 2033df0814b49da8488307434b9b6236076750c6..c9e73c343c92bf1f6aeb83237992d9ab253fb2dd 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/ortholog/OrthologPanel.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/ortholog/OrthologPanel.java
@@ -17,31 +17,38 @@
  * 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/genebuilder/ortholog/OrthologPanel.java,v 1.1 2007-03-15 11:39:07 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/ortholog/OrthologPanel.java,v 1.2 2007-03-20 13:48:10 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components.genebuilder.ortholog;
 
 import java.awt.Component;
 import java.awt.FlowLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
 
 import javax.swing.Box;
-import javax.swing.JLabel;
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JTextField;
 
 import uk.ac.sanger.artemis.FeatureChangeEvent;
 import uk.ac.sanger.artemis.FeatureChangeListener;
 import uk.ac.sanger.artemis.Feature;
+import uk.ac.sanger.artemis.io.DocumentEntry;
 import uk.ac.sanger.artemis.io.Qualifier;
 import uk.ac.sanger.artemis.io.QualifierVector;
+import uk.ac.sanger.artemis.util.DatabaseDocument;
+import uk.ac.sanger.artemis.util.StringVector;
+import uk.ac.sanger.artemis.components.genebuilder.JExtendedComboBox;
 
 public class OrthologPanel extends JPanel
                       implements FeatureChangeListener
 {
   private static final long serialVersionUID = 1L;
-  private QualifierVector orthologQualifiers;
+  private QualifierVector ortho_para_logQualifiers;
   
   public OrthologPanel(final Feature feature)
   {
@@ -61,80 +68,160 @@ public class OrthologPanel extends JPanel
     return false;
   }
   
-  private Component createOrthologQualifiersComponent()
+  private Component createOrthoParaLogQualifiersComponent(final Feature feature)
   {
-    int nrows = 0;
+    Qualifier orthoQualifier = ortho_para_logQualifiers.getQualifierByName("ortholog");
+    Qualifier paraQualifier  = ortho_para_logQualifiers.getQualifierByName("paralog");
     
-    Qualifier idQualifier = orthologQualifiers.getQualifierByName("ID");
+    DocumentEntry entry = (DocumentEntry)feature.getEmblFeature().getEntry();
+    DatabaseDocument doc = (DatabaseDocument)entry.getDocument();
+    final Vector databases = (Vector)doc.getDatabaseNames();
     
-    Box gffBox = Box.createVerticalBox();
-    gffBox.add(Box.createVerticalStrut(10));
-    
-    GridBagLayout grid = new GridBagLayout();
-    GridBagConstraints c = new GridBagConstraints();
-    c.ipady = 5;
-    JPanel gridPanel = new JPanel(grid);
-    
-
-    if(idQualifier != null)
+    //
+    // ortholog
+    Box xBox = Box.createVerticalBox();
+    JButton addOrthoButton = new JButton("ADD ORTHOLOG");
+    addOrthoButton.addActionListener(new ActionListener()
     {
-      final String uniquename = (String)idQualifier.getValues().get(0);
-      JLabel idField = new JLabel("ID");
-      
-      
-      c.gridx = 0;
-      c.gridy = 0;
-      c.ipadx = 5;
-      c.anchor = GridBagConstraints.EAST;
-      gridPanel.add(idField, c);
-      c.gridx = 1;
-      c.gridy = 0;
-      c.ipadx = 0;
-      c.anchor = GridBagConstraints.WEST;
-      //gridPanel.add(uniquenameTextField, c);
-      
+      public void actionPerformed(ActionEvent e)
+      { 
+        JExtendedComboBox dbs = new JExtendedComboBox(databases);
+        
+        JTextField accession = new JTextField(15);
+        
+        Box yBox = Box.createHorizontalBox();
+        yBox.add(dbs);
+        yBox.add(accession);
 
+        int select = JOptionPane.showConfirmDialog(null, 
+              yBox, "Add Ortholog",
+              JOptionPane.OK_CANCEL_OPTION);
+        if(select == JOptionPane.CANCEL_OPTION)
+          return;
+        
+        add("ortholog", ((String)dbs.getSelectedItem())+":"+
+                        accession.getText().trim(), feature);
+      }
+    });
+    xBox.add(addOrthoButton);
+    
+    if(orthoQualifier != null)
+    {
+      StringVector orthologs = orthoQualifier.getValues();
+      for(int i=0; i<orthologs.size(); i++)
+      {
+        JTextField ortholog = new JTextField( (String)orthologs.get(i) );
+        xBox.add(ortholog);
+      }
     }
     
+    //
+    // paralog
+    JButton addParaButton = new JButton("ADD PARALOG");
+    addParaButton.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      { 
+        JExtendedComboBox dbs = new JExtendedComboBox(databases);
+        JTextField accession = new JTextField(15);
+        
+        Box yBox = Box.createHorizontalBox();
+        yBox.add(dbs);
+        yBox.add(accession);
+
+        int select = JOptionPane.showConfirmDialog(null, 
+              yBox, "Add Paralog",
+              JOptionPane.OK_CANCEL_OPTION);
+        if(select == JOptionPane.CANCEL_OPTION)
+          return;
+        
+        add("paralog", ((String)dbs.getSelectedItem())+":"+
+                        accession.getText().trim(), feature);
+      }
+    });
+    xBox.add(addParaButton);
     
+    if(paraQualifier != null)
+    {
+      StringVector paralogs = paraQualifier.getValues();
+      for(int i=0; i<paralogs.size(); i++)
+      {
+        JTextField paralog = new JTextField( (String)paralogs.get(i) );
+        xBox.add(paralog);
+      }
+    }
 
-    gffBox.add(gridPanel);
-    return gffBox;
+    return xBox;
   }
   
+  /**
+   * Update ortho/paralogs for a feature
+   * @param feature
+   */
   public void updateFromFeature(final Feature feature)
   {
     removeAll();
-    if(orthologQualifiers != null)
+    if(ortho_para_logQualifiers != null)
       feature.removeFeatureChangeListener(this);
-    orthologQualifiers = feature.getQualifiers().copy();
+    ortho_para_logQualifiers = feature.getQualifiers().copy();
     
-    orthologQualifiers = new QualifierVector();
+    ortho_para_logQualifiers = new QualifierVector();
     final QualifierVector qualifiers = feature.getQualifiers();  
     for(int i = 0 ; i < qualifiers.size(); ++i) 
     {
       Qualifier qualifier = (Qualifier)qualifiers.elementAt(i);
       if(isOrthologTag(qualifier))
-        orthologQualifiers.addElement(qualifier.copy());
+        ortho_para_logQualifiers.addElement(qualifier.copy());
     }
    
     feature.addFeatureChangeListener(this);  
-    add(createOrthologQualifiersComponent());
+    add(createOrthoParaLogQualifiersComponent(feature));
     repaint();
     revalidate();
   }
 
+  /**
+   * Add ortholog/paralog
+   * @param name  ortholog or paralog
+   * @param value
+   */
+  public void add(final String name, final String value, final Feature feature)
+  {
+    final int index;
+    
+    Qualifier qualifier = ortho_para_logQualifiers.getQualifierByName(name);
+    
+    if(qualifier == null)
+    {
+      qualifier = new Qualifier(name);
+      index = -1;
+    }
+    else
+     index = ortho_para_logQualifiers.indexOf(qualifier);
+       
+    qualifier.addValue(value);
+
+    if(index > -1)
+    {
+      ortho_para_logQualifiers.remove(index);
+      ortho_para_logQualifiers.add(index, qualifier);
+    }
+    else
+      ortho_para_logQualifiers.add(qualifier);
+    
+    removeAll();
+    add(createOrthoParaLogQualifiersComponent(feature));
+    repaint();
+    revalidate();
+  }
+  
   /**
    * Get the latest (edited) controlled vocab qualifiers
    * @return
    */
   public QualifierVector getOrthologQualifiers()
   {
-    // check editable components for changes
-    
-    // 
-    
-    return orthologQualifiers;
+    return ortho_para_logQualifiers;
   }
   
   public void featureChanged(FeatureChangeEvent event)