diff --git a/uk/ac/sanger/artemis/components/AddMenu.java b/uk/ac/sanger/artemis/components/AddMenu.java
index dc190584987d726597e115e171024aec7507ce79..c053f637101ff57740b91cc0406c5566591fc554 100644
--- a/uk/ac/sanger/artemis/components/AddMenu.java
+++ b/uk/ac/sanger/artemis/components/AddMenu.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/AddMenu.java,v 1.5 2005-04-05 16:16:54 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/AddMenu.java,v 1.6 2005-04-06 16:07:03 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components;
@@ -54,7 +54,7 @@ import javax.swing.*;
  *  should have been called CreateMenu.
  *
  *  @author Kim Rutherford
- *  @version $Id: AddMenu.java,v 1.5 2005-04-05 16:16:54 tjc Exp $
+ *  @version $Id: AddMenu.java,v 1.6 2005-04-06 16:07:03 tjc Exp $
  **/
 public class AddMenu extends SelectionMenu 
 {
@@ -153,75 +153,22 @@ public class AddMenu extends SelectionMenu
       {
         public void actionPerformed (ActionEvent event) 
         {
-          Vector diffs;
-          if(alignQueryViewer != null)
-            diffs = alignQueryViewer.getDifferenceCoords(false);
-          else
-            diffs = alignSubjectViewer.getDifferenceCoords(true);
-
-          Enumeration eDiffs = diffs.elements();
-          while(eDiffs.hasMoreElements())
+          Vector diffs = null;
+          if(alignQueryViewer == null || alignSubjectViewer == null)
           {
-            Integer coords[] = (Integer[])eDiffs.nextElement();
-            int start = coords[0].intValue();
-            int end   = coords[1].intValue();
-//          System.out.println(start+" "+end);
+            if(alignQueryViewer != null)
+              diffs = alignQueryViewer.getDifferenceCoords(false);
+            else
+              diffs = alignSubjectViewer.getDifferenceCoords(true);
+          }
+          else    // multi-comparison
+          {
+            Vector diffs1 = alignQueryViewer.getDifferenceCoords(false);
+            Vector diffs2 = alignSubjectViewer.getDifferenceCoords(true);
             
-            final Entry default_entry = entry_group.getDefaultEntry();
-            if(default_entry == null) 
-            {
-              new MessageDialog(frame, "There is no default entry");
-              return;
-            }
-
-            Location loc = null;
-            Feature temp_feature;
-            try 
-            {
-              loc = new Location(start+".."+end);
-              temp_feature = default_entry.createFeature(Key.CDS, loc);
-            } 
-            catch(EntryInformationException e) 
-            {
-              // use the default key instead
-              final Key default_key =
-                default_entry.getEntryInformation().getDefaultKey();
-
-              try
-              {
-                temp_feature =
-                    default_entry.createFeature(default_key, loc);
-              }
-              catch(EntryInformationException einfo)
-              {
-                throw new Error("internal error - unexpected exception: " + einfo);
-              }
-              catch(ReadOnlyException eRead)
-              {
-                new MessageDialog(frame, "feature not created: " +
-                                "the default entry is read only");
-              }
-              catch(OutOfRangeException eout)
-              {
-                throw new Error("internal error - unexpected exception: " + eout);
-              }
-
-            }
-            catch(ReadOnlyException e) 
-            {
-              new MessageDialog(frame, "feature not created: " +
-                              "the default entry is read only");
-            } 
-            catch(OutOfRangeException e) 
-            {
-              throw new Error("internal error - unexpected exception: " + e);
-            }
-            catch(LocationParseException  lpe)
-            {
-              throw new Error("internal error - unexpected exception: " + lpe);
-            }
+            diffs = union(diffs1,diffs2);
           }
-
+          createFeatures(diffs, frame);
         }
       });
 
@@ -325,6 +272,123 @@ public class AddMenu extends SelectionMenu
     add (mark_ambiguities_item);
   }
 
+  /**
+  *
+  * Find the union of coordinates in two Vecor objects.
+  * @param v1 Vector of Integer coordinates
+  * @param v2 Vector of Integer coordinates
+  *  
+  */
+  private Vector union(Vector v1, Vector v2)
+  {
+    Vector union = new Vector();
+
+    for(int i=0; i<v1.size(); i++)
+    {
+      Integer[] imatch = (Integer[])v1.get(i);
+      int istart = imatch[0].intValue();
+      int iend   = imatch[1].intValue();
+
+      for(int j=0; j<v2.size(); j++)
+      {
+        Integer[] jmatch = (Integer[])v2.get(j);
+        int jstart = jmatch[0].intValue();
+        int jend   = jmatch[1].intValue();
+
+        if( (istart >= jstart && istart <= jend) ||
+            (iend >= jstart && iend <= jend) ||
+            (jstart > istart && jend < iend) )
+        {
+          if(jstart > istart)
+            istart = jstart;
+          
+          if(iend < jend)
+            jend = iend;
+
+          Integer coords[] = new Integer[2];
+          coords[0] = new Integer(istart);
+          coords[1] = new Integer(jend);
+          union.add(coords);
+        }
+      }
+    }
+
+    return union;
+  }
+
+  /**
+  *
+  * Create features from Vector of coordinates.
+  * @param diffs Vector of coordinates to create feature from.
+  * @param frame The JFrame that owns this JMenu.
+  *
+  */
+  private void createFeatures(Vector diffs, JFrame frame) 
+  {
+    Enumeration eDiffs = diffs.elements();
+    while(eDiffs.hasMoreElements())
+    {
+      Integer coords[] = (Integer[])eDiffs.nextElement();
+      int start = coords[0].intValue();
+      int end   = coords[1].intValue();
+//    System.out.println(start+" "+end);
+         
+      final Entry default_entry = entry_group.getDefaultEntry();
+      if(default_entry == null) 
+      {
+        new MessageDialog(frame, "There is no default entry");
+        return;
+      }
+
+      Location loc = null;
+      Feature temp_feature;
+      try 
+      {
+        loc = new Location(start+".."+end);
+        temp_feature = default_entry.createFeature(Key.CDS, loc);
+      } 
+      catch(EntryInformationException e) 
+      {
+        // use the default key instead
+        final Key default_key =
+          default_entry.getEntryInformation().getDefaultKey();
+
+        try
+        {
+          temp_feature =
+              default_entry.createFeature(default_key, loc);
+        }
+        catch(EntryInformationException einfo)
+        {
+          throw new Error("internal error - unexpected exception: " + einfo);
+        }
+        catch(ReadOnlyException eRead)
+        {
+          new MessageDialog(frame, "feature not created: " +
+                          "the default entry is read only");
+        }
+        catch(OutOfRangeException eout)
+        {
+          throw new Error("internal error - unexpected exception: " + eout);
+        }
+
+      }
+      catch(ReadOnlyException e) 
+      {
+        new MessageDialog(frame, "feature not created: " +
+                        "the default entry is read only");
+      } 
+      catch(OutOfRangeException e) 
+      {
+        throw new Error("internal error - unexpected exception: " + e);
+      }
+      catch(LocationParseException  lpe)
+      {
+        throw new Error("internal error - unexpected exception: " + lpe);
+      }
+    }
+  }
+
   /**
    *  Create a new AddMenu object.
    *  @param frame The JFrame that owns this JMenu.