diff --git a/uk/ac/sanger/artemis/components/AddMenu.java b/uk/ac/sanger/artemis/components/AddMenu.java
index 72ffba7b125aa380a273f98f449e85c9c433ae5b..2cec8876a92940ba534f8f5bdcd29b17cec42fab 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.31 2007-10-18 15:05:52 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/AddMenu.java,v 1.32 2007-12-12 16:03:09 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components;
@@ -73,7 +73,7 @@ import javax.swing.KeyStroke;
  *  should have been called CreateMenu.
  *
  *  @author Kim Rutherford
- *  @version $Id: AddMenu.java,v 1.31 2007-10-18 15:05:52 tjc Exp $
+ *  @version $Id: AddMenu.java,v 1.32 2007-12-12 16:03:09 tjc Exp $
  **/
 public class AddMenu extends SelectionMenu 
 {
@@ -265,6 +265,15 @@ public class AddMenu extends SelectionMenu
     if(entry_group.getDefaultEntry().getEMBLEntry() instanceof 
         uk.ac.sanger.artemis.io.DatabaseDocumentEntry)
       create_intron_features_item.setEnabled(false);
+    
+    final JMenuItem create_intergenic_features_item =
+      new JMenuItem ("Create Intergenic Features");
+    create_intergenic_features_item.addActionListener(new ActionListener () {
+      public void actionPerformed (ActionEvent event) {
+        createIntergenicFeatures(getParentFrame (), entry_group);
+      }
+    });
+    add (create_intergenic_features_item);
 
     final JMenuItem create_exon_features_item =
       new JMenuItem ("Create Exon Features");
@@ -833,6 +842,93 @@ public class AddMenu extends SelectionMenu
     }
   }
 
+  
+  /**
+   *  Create intergenic regions between CDS.
+   *  @param frame The Frame to use for MessageDialog components.
+   *  @param entry_group The EntryGroup to create the features in.
+   **/
+  static void createIntergenicFeatures (final JFrame frame,
+                                    final EntryGroup entry_group) 
+  {
+    try {
+      entry_group.getActionController ().startAction ();
+
+      final FeatureKeyPredicate predicate = new FeatureKeyPredicate(Key.CDS);
+      final FeatureVector cdsFeatures = new FeatureVector ();
+
+      final FeatureEnumeration feature_enum = entry_group.features ();
+      while (feature_enum.hasMoreFeatures ()) 
+      {
+        final Feature current_feature = feature_enum.nextFeature ();
+        if(predicate.testPredicate (current_feature)) 
+          cdsFeatures.add (current_feature);
+      }
+
+
+      RangeVector cdsRanges = new RangeVector();
+      for (int i = 0; i < cdsFeatures.size (); ++i)
+      {
+        final Feature selection_feature = cdsFeatures.elementAt(i);
+        final Location cds_location = selection_feature.getLocation();
+        final Range cds_range = cds_location.getTotalRange();
+
+        cdsRanges.add(cds_range);
+        
+        //if (cds_location.isComplement ()) {
+        //  cds_ranges.reverse ();
+        //}
+      }
+      
+      int prevEnd = 1;
+      
+      for(int i=0; i < cdsRanges.size(); i++)
+      {
+        Range r = (Range)cdsRanges.get(i);
+        int currentStart = r.getStart();
+        
+        if(i==0 && r.getStart()==1)
+        {
+          prevEnd = r.getEnd();
+          continue;
+        }
+        
+        try 
+        {
+          Range new_range = new Range(prevEnd + 1,
+                                      currentStart - 1);
+          Location location = new Location(new_range);
+          final Key key = new Key ("misc_feature");
+          final QualifierVector qualifiers = new QualifierVector ();
+          entry_group.getDefaultEntry().createFeature(key,
+              location, qualifiers);
+          prevEnd = r.getEnd();
+          
+          if(i==cdsRanges.size()-1)
+          {
+            if(entry_group.getSequenceLength() > r.getEnd())
+            {
+              new_range = new Range(prevEnd + 1,
+                  entry_group.getSequenceLength());
+              location = new Location(new_range);
+              entry_group.getDefaultEntry().createFeature(key,
+                                        location, qualifiers);
+            }
+          }
+        } 
+        catch (OutOfRangeException e) {}
+        catch(ReadOnlyException e)  {}
+        catch(EntryInformationException e) {}
+        
+      }
+    } 
+    finally 
+    {
+      entry_group.getActionController ().endAction ();
+    }
+  }
+
+  
   /**
    *  Create a new exon for each FeatureSegment in the selected CDS features.
    *  The exons are created in the Entry that contains the CDSs.