diff --git a/uk/ac/sanger/artemis/components/FeatureEdit.java b/uk/ac/sanger/artemis/components/FeatureEdit.java
index 6f16565a14143af9c937eaea6c944b795b209ebd..35e16b40bfdfe2b5151a8a3f6176123cb88ec3bf 100644
--- a/uk/ac/sanger/artemis/components/FeatureEdit.java
+++ b/uk/ac/sanger/artemis/components/FeatureEdit.java
@@ -20,14 +20,14 @@
  * 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/FeatureEdit.java,v 1.3 2004-08-13 13:59:20 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/FeatureEdit.java,v 1.4 2004-08-26 12:51:56 tjc Exp $
  **/
 
 package uk.ac.sanger.artemis.components;
 
 import uk.ac.sanger.artemis.util.*;
 import uk.ac.sanger.artemis.*;
-import uk.ac.sanger.artemis.sequence.*;
+import uk.ac.sanger.artemis.sequence.MarkerRange;
 
 import uk.ac.sanger.artemis.io.OutOfDateException;
 import uk.ac.sanger.artemis.io.LocationParseException;
@@ -44,19 +44,21 @@ import uk.ac.sanger.artemis.io.EntryInformation;
 import uk.ac.sanger.artemis.io.EntryInformationException;
 import uk.ac.sanger.artemis.io.StreamQualifier;
 import uk.ac.sanger.artemis.io.QualifierInfo;
-import uk.ac.sanger.artemis.io.EmblStreamFeature;
+
+import uk.ac.sanger.artemis.components.ProgressThread;
 
 import java.awt.*;
 import java.awt.event.*;
 import java.io.*;
 import java.util.Date;
+import java.util.Vector;
 import javax.swing.*;
 
 /**
  *  FeatureEdit class
  *
  *  @author Kim Rutherford
- *  @version $Id: FeatureEdit.java,v 1.3 2004-08-13 13:59:20 tjc Exp $
+ *  @version $Id: FeatureEdit.java,v 1.4 2004-08-26 12:51:56 tjc Exp $
  **/
 
 public class FeatureEdit extends JFrame
@@ -76,18 +78,18 @@ public class FeatureEdit extends JFrame
   private final static int LOCATION_TEXT_WIDTH = 80;
 
   /** The location text - set by updateLocation(). */
-  private JTextField location_text = new JTextField (LOCATION_TEXT_WIDTH);
+  private JTextField location_text = new JTextField(LOCATION_TEXT_WIDTH);
 
-  private JButton add_qualifier_button = new JButton ("Add qualifier");
+  private JButton add_qualifier_button = new JButton("Add qualifier");
 
   /** When pressed - apply changes and dispose of the component. */
-  private JButton ok_button = new JButton ("OK");
+  private JButton ok_button = new JButton("OK");
 
   /** When pressed - discard changes and dispose of the component. */
-  private JButton cancel_button = new JButton ("Cancel");
+  private JButton cancel_button = new JButton("Cancel");
 
   /** When pressed - apply changes and keep the component open. */
-  private JButton apply_button = new JButton ("Apply");
+  private JButton apply_button = new JButton("Apply");
 
   /** Edit area for qualifiers - created by createComponents(). */
   private QualifierTextArea qualifier_text_area;
@@ -108,7 +110,7 @@ public class FeatureEdit extends JFrame
   private EntryGroup entry_group;
 
   /**
-   *  The datestamp of the RWCorbaFeature when updateFromFeature () was last
+   *  The datestamp of the RWCorbaFeature when updateFromFeature() was last
    *  called or null if this is not a RWCorbaFeature.
    **/
   private Date datestamp = null;
@@ -128,26 +130,25 @@ public class FeatureEdit extends JFrame
    *  @param entry_group The EntryGroup that contains this Feature.
    *  @param selection The Selection operate on.  The operations are "Remove
    *    Range" and "Grab Range"
-   *  @param goto_event_source The object the we will call gotoBase () on.
+   *  @param goto_event_source The object the we will call gotoBase() on.
    **/
-  public FeatureEdit (final Feature edit_feature,
-                      final EntryGroup entry_group,
-                      final Selection selection,
-                      final GotoEventSource goto_event_source) 
+  public FeatureEdit(final Feature edit_feature,
+                     final EntryGroup entry_group,
+                     final Selection selection,
+                     final GotoEventSource goto_event_source) 
   {
-    super("Artemis Feature Edit: " + edit_feature.getIDString () +
-          (edit_feature.isReadOnly () ?
+    super("Artemis Feature Edit: " + edit_feature.getIDString() +
+          (edit_feature.isReadOnly() ?
            "  -  (read only)" :
            ""));
 
     this.edit_feature = edit_feature;
-    this.edit_entry   = edit_feature.getEntry ();
+    this.edit_entry   = edit_feature.getEntry();
     this.entry_group  = entry_group;
     this.selection    = selection;
     this.goto_event_source = goto_event_source;
 
     createComponents();
-
     updateFromFeature();
 
     orig_qualifier_text = qualifier_text_area.getText();
@@ -157,14 +158,14 @@ public class FeatureEdit extends JFrame
 
     addWindowListener(new WindowAdapter() 
     {
-      public void windowClosing (WindowEvent event) 
+      public void windowClosing(WindowEvent event) 
       {
-        stopListening ();
-        dispose ();
+        stopListening();
+        dispose();
       }
     });
 
-    pack ();
+    pack();
 
     final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
     setLocation(new Point((screen.width - getSize().width)/2,
@@ -178,8 +179,8 @@ public class FeatureEdit extends JFrame
    **/
   public void stopListening() 
   {
-    getEntry().removeEntryChangeListener (this);
-    getFeature().removeFeatureChangeListener (this);
+    getEntry().removeEntryChangeListener(this);
+    getFeature().removeFeatureChangeListener(this);
   }
 
   /**
@@ -187,15 +188,15 @@ public class FeatureEdit extends JFrame
    *  EntryChange events so we can notify the user if of this component if the
    *  feature gets deleted.
    **/
-  public void entryChanged (EntryChangeEvent event) 
+  public void entryChanged(EntryChangeEvent event) 
   {
     switch(event.getType())
     {
       case EntryChangeEvent.FEATURE_DELETED:
-        if (event.getFeature () == edit_feature) 
+        if(event.getFeature() == edit_feature) 
         {
-          stopListening ();
-         dispose ();
+          stopListening();
+          dispose();
         }
         break;
       default:
@@ -225,7 +226,7 @@ public class FeatureEdit extends JFrame
    **/
   public void addApplyActionListener(final ActionListener l) 
   {
-    apply_button.addActionListener (l);
+    apply_button.addActionListener(l);
   }
 
   /**
@@ -245,33 +246,33 @@ public class FeatureEdit extends JFrame
   public void featureChanged(FeatureChangeEvent event) 
   {
     // re-read the information from the feature
-    switch (event.getType ()) 
+    switch(event.getType()) 
     {
-    case FeatureChangeEvent.LOCATION_CHANGED:
-      updateLocation ();
-      break;
-    case FeatureChangeEvent.KEY_CHANGED:
-      updateKey ();
-      break;
-    case FeatureChangeEvent.QUALIFIER_CHANGED:
-      if(qualifier_text_area.getText ().equals (orig_qualifier_text)) 
-        updateFromFeature ();
-      else
-      {
-        final String message =
-          "warning: the qualifiers have changed outside the editor - " +
-          "view now?";
+      case FeatureChangeEvent.LOCATION_CHANGED:
+        updateLocation();
+        break;
+      case FeatureChangeEvent.KEY_CHANGED:
+        updateKey();
+        break;
+      case FeatureChangeEvent.QUALIFIER_CHANGED:
+        if(qualifier_text_area.getText().equals(orig_qualifier_text)) 
+          updateFromFeature();
+        else
+        {
+          final String message =
+            "warning: the qualifiers have changed outside the editor - " +
+            "view now?";
 
-        final YesNoDialog yes_no_dialog =
-          new YesNoDialog(FeatureEdit.this, message);
+          final YesNoDialog yes_no_dialog =
+            new YesNoDialog(FeatureEdit.this, message);
 
-        if(yes_no_dialog.getResult()) 
-          new FeatureViewer(getFeature());
-      }
-      break;
-    default:
-      updateFromFeature ();
-      break;
+          if(yes_no_dialog.getResult()) 
+            new FeatureViewer(getFeature());
+        }
+        break;
+      default:
+        updateFromFeature();
+        break;
     }
   }
 
@@ -281,26 +282,24 @@ public class FeatureEdit extends JFrame
    **/
   private void createComponents()
   {
-    qualifier_text_area = new QualifierTextArea ();
-    qualifier_text_area.setWrapStyleWord (true);
+    qualifier_text_area = new QualifierTextArea();
+    qualifier_text_area.setWrapStyleWord(true);
 
     key_choice =
       new KeyChoice(getEntryInformation(),getFeature().getKey());
 
     final JPanel key_and_qualifier_panel = new JPanel();
-
     location_text.setBackground(Color.white);
 
     final JPanel key_panel = new JPanel();
-    key_panel.add(new JLabel ("Key:"));
+    key_panel.add(new JLabel("Key:"));
     key_panel.add(key_choice);
 
     key_and_qualifier_panel.setLayout(new BorderLayout());
     key_and_qualifier_panel.add(key_panel, "West");
 
     qualifier_choice = new QualifierChoice(getEntryInformation(),
-                                           key_choice.getSelectedItem(),
-                                           null);
+                                  key_choice.getSelectedItem(),null);
 
     final JPanel qualifier_panel = new JPanel();
     final JButton qualifier_add_button = new JButton("Add Qualifier:");
@@ -314,7 +313,7 @@ public class FeatureEdit extends JFrame
     {
       public void itemStateChanged(ItemEvent _) 
       {
-        qualifier_choice.setKey (key_choice.getSelectedItem ());
+        qualifier_choice.setKey(key_choice.getSelectedItem());
       }
     });
 
@@ -323,21 +322,19 @@ public class FeatureEdit extends JFrame
       public void actionPerformed(ActionEvent e)
       {
         final String qualifier_name =
-          (String)qualifier_choice.getSelectedItem ();
+          (String)qualifier_choice.getSelectedItem();
 
         QualifierInfo qualifier_info =
           getEntryInformation().getQualifierInfo(qualifier_name);
 
         if(qualifier_info == null) 
-        {
           qualifier_info = new QualifierInfo(qualifier_name,
                               QualifierInfo.OPTIONAL_QUOTED_TEXT,
                               null, null, false);
-        }
 
         qualifier_text_area.append("/" + qualifier_name);
 
-        switch (qualifier_info.getType ()) 
+        switch(qualifier_info.getType()) 
         {
           case QualifierInfo.QUOTED_TEXT:
             if(qualifier_name.equals("GO")) 
@@ -346,8 +343,7 @@ public class FeatureEdit extends JFrame
               final java.util.Calendar calendar =
                       java.util.Calendar.getInstance();
                 
-              final java.util.Date current_time =
-                                    calendar.getTime();
+              final Date current_time = calendar.getTime();
             
               final java.text.SimpleDateFormat date_format =
                   new java.text.SimpleDateFormat("yyyyMMdd");
@@ -357,15 +353,13 @@ public class FeatureEdit extends JFrame
               date_format.format(current_time, result_buffer,
                                  new java.text.FieldPosition(java.text.DateFormat.DATE_FIELD));
             
-              final String go_string =
-                "aspect=; term=; GOid=GO:; "+
-                "evidence=ISS; db_xref=GOC:unpublished; " +
-                "with=UNIPROT:; date=" + result_buffer;
+              final String go_string = "aspect=; term=; GOid=GO:; "+
+                                       "evidence=ISS; db_xref=GOC:unpublished; " +
+                                       "with=UNIPROT:; date=" + result_buffer;
               qualifier_text_area.append("=\"" + go_string + "\"");
             } 
             else 
               qualifier_text_area.append ("=\"\"");
-            
             break;
 
           case QualifierInfo.NO_VALUE:
@@ -373,18 +367,18 @@ public class FeatureEdit extends JFrame
             break;
 
           default:
-            qualifier_text_area.append ("=");
+            qualifier_text_area.append("=");
         }
 
-        qualifier_text_area.append ("\n");
+        qualifier_text_area.append("\n");
       }
     });
 
     final JPanel middle_panel = new JPanel();
-    middle_panel.setLayout (new BorderLayout());
+    middle_panel.setLayout(new BorderLayout());
 
     final JPanel lower_panel = new JPanel();
-    lower_panel.setLayout (new BorderLayout());
+    lower_panel.setLayout(new BorderLayout());
 
     final JPanel outer_location_button_panel = new JPanel();
     lower_panel.add(outer_location_button_panel, "North");
@@ -396,7 +390,7 @@ public class FeatureEdit extends JFrame
     final JPanel location_panel = new JPanel();
     location_panel.setLayout(new BorderLayout());
     location_panel.add(new JLabel("location: "), "West");
-    location_panel.add (location_text, "Center");
+    location_panel.add(location_text, "Center");
 
     final JButton complement_button = new JButton("Complement");
     location_button_panel.add(complement_button);
@@ -414,7 +408,7 @@ public class FeatureEdit extends JFrame
     {
       public void actionPerformed(ActionEvent e)
       {
-        grabSelectedRange ();
+        grabSelectedRange();
       }
     });
 
@@ -430,7 +424,7 @@ public class FeatureEdit extends JFrame
 
     final JButton goto_button = new JButton("Goto Feature");
     location_button_panel.add(goto_button);
-    goto_button.addActionListener(new ActionListener () 
+    goto_button.addActionListener(new ActionListener() 
     {
       public void actionPerformed(ActionEvent e)
       {
@@ -448,10 +442,7 @@ public class FeatureEdit extends JFrame
       }
     });
 
-    final boolean sanger_options =
-      Options.getOptions().getPropertyTruthValue("sanger_options");
-
-    if(sanger_options) 
+    if(Options.getOptions().getPropertyTruthValue("sanger_options"))
     {
       // a PSU only hack 
       final JButton tidy_button = new JButton("Tidy");
@@ -462,9 +453,9 @@ public class FeatureEdit extends JFrame
         {
           try 
           {
-            tidy ();
+            tidy();
           } 
-          catch (QualifierParseException exception) 
+          catch(QualifierParseException exception) 
           {
             final String error_string = exception.getMessage();
             new MessageDialog(FeatureEdit.this,
@@ -500,37 +491,24 @@ public class FeatureEdit extends JFrame
                 else 
                   max_fasta_hits = max_fasta_hits_from_options;
 
-                externalEdit(new String[] 
-                {
-                  "-fasta",
-                  "-maxhits",
-                  max_fasta_hits,
-                  "-euk"
-                });
+                externalEdit(new String[] { "-fasta", "-maxhits",
+                                            max_fasta_hits, "-euk" });
               } 
               else 
               {
                 if(max_fasta_hits_from_options == null) 
                 {
-                  externalEdit(new String[] 
-                  {
-                    "-fasta"
-                  });
+                  externalEdit(new String[] { "-fasta" });
                 } 
                 else 
                 {
-                  externalEdit(new String[] 
-                  {
-                    "-fasta",
-                    "-maxhits",
-                    max_fasta_hits_from_options
-                  });
-
+                  externalEdit(new String[] { "-fasta", "-maxhits",
+                                              max_fasta_hits_from_options });
                 }
               }
               return;
             }
-          } catch (InvalidRelationException _) {}
+          } catch(InvalidRelationException _) {}
           
           new MessageDialog(FeatureEdit.this,
                             "nothing to edit - no /fasta_file qualifier");
@@ -560,22 +538,13 @@ public class FeatureEdit extends JFrame
 
               if(Options.getOptions().isEukaryoticMode()) 
               {
-                externalEdit(new String[] 
-                {
-                  "-blastp",
-                  "-maxhits",
-                  max_blastp_hits,
-                  "-euk"
-                });
+                externalEdit(new String[] { "-blastp", "-maxhits",
+                                            max_blastp_hits, "-euk" });
               } 
               else
               {
-                externalEdit(new String[] 
-                {
-                  "-blastp",
-                  "-maxhits",
-                  max_blastp_hits
-                });
+                externalEdit(new String[] { "-blastp", "-maxhits",
+                                            max_blastp_hits });
               }
               return;
             }
@@ -609,26 +578,17 @@ public class FeatureEdit extends JFrame
 
               if(Options.getOptions().isEukaryoticMode()) 
               {
-                externalEdit(new String[] 
-                {
-                  "-blastp+go",
-                  "-maxhits",
-                  max_go_blast_hits,
-                  "-euk"
-                });
+                externalEdit(new String[] { "-blastp+go", "-maxhits",
+                                            max_go_blast_hits, "-euk" });
               } 
               else
               {
-                externalEdit(new String[] 
-                {
-                  "-blastp+go",
-                  "-maxhits",
-                  max_go_blast_hits
-                });
+                externalEdit(new String[] { "-blastp+go", "-maxhits",
+                                            max_go_blast_hits });
               }
               return;
             }
-          } catch (InvalidRelationException _) {}
+          } catch(InvalidRelationException _) {}
           
           new MessageDialog(FeatureEdit.this,
                             "nothing to edit - no /blastp+go_file qualifier");
@@ -636,8 +596,67 @@ public class FeatureEdit extends JFrame
       });
     }
 
-    middle_panel.add(location_panel, "North");
+    if(Options.isUnixHost())
+    {
+      JButton oo_edit_button = new JButton("ObjectEdit");
+      location_button_panel.add(oo_edit_button);
+      oo_edit_button.addActionListener(new ActionListener ()
+      {
+        public void actionPerformed(ActionEvent e)
+        {
+          String qualifier_txt = qualifier_text_area.getText();
+        
+          StringReader strRead = new StringReader(qualifier_txt);
+          BufferedReader buff = new BufferedReader(strRead);
+          String line;
+          final Vector dataFile = new Vector();
+          try
+          {
+            while((line = buff.readLine()) != null)
+            {
+              if(line.startsWith("/fasta_file="))
+              {
+                int ind = line.lastIndexOf("\"");
+                if(ind > -1)
+                  dataFile.add(line.substring(13,ind));
+              }
+              else if(line.startsWith("/blastp_file="))
+              {
+                int ind = line.lastIndexOf("\"");
+                if(ind > -1)
+                  dataFile.add(line.substring(14,ind));
+              }
+              else if(line.startsWith("/blastp+go_file="))
+              {
+                int ind = line.lastIndexOf("\"");
+                if(ind > -1)
+                  dataFile.add(line.substring(17,ind));
+              }   
+            }
+          }
+          catch(IOException ioe){}
+ 
+          FeatureEdit.this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); 
+          final ProgressThread progress = new ProgressThread(null,
+                                        "Loading Data....");
+          progress.start();
+          SwingWorker ooEd = new SwingWorker()
+          {
+            public Object construct()
+            {
+              new uk.ac.sanger.artemis.editor.BigPane(dataFile.toArray(),
+                                                  qualifier_text_area);
+              progress.finished();
+              FeatureEdit.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+              return null;
+            }
+          };
+          ooEd.start();   
+        }
+      });
+    }
 
+    middle_panel.add(location_panel, "North");
     getContentPane().add(key_and_qualifier_panel, "North");
 
     cancel_button.addActionListener(new ActionListener()
@@ -678,12 +697,12 @@ public class FeatureEdit extends JFrame
     final JPanel ok_cancel_update_panel = new JPanel(flow_layout);
 
     if(!getFeature().isReadOnly()) 
-      ok_cancel_update_panel.add (ok_button);
+      ok_cancel_update_panel.add(ok_button);
 
-    ok_cancel_update_panel.add (cancel_button);
+    ok_cancel_update_panel.add(cancel_button);
 
     if(!getFeature().isReadOnly()) 
-      ok_cancel_update_panel.add (apply_button);
+      ok_cancel_update_panel.add(apply_button);
 
     getContentPane().add(ok_cancel_update_panel, "South");
 
@@ -724,24 +743,24 @@ public class FeatureEdit extends JFrame
       if(location_text.getText().startsWith("complement(")) 
       {
         final String new_text = location_text.getText().substring(11);
-        if (new_text.endsWith (")")) 
+        if (new_text.endsWith(")")) 
         {
           final String new_text2 =
-            new_text.substring (0, new_text.length () - 1);
-          location_text.setText (new_text2);
+            new_text.substring(0, new_text.length () - 1);
+          location_text.setText(new_text2);
         } 
         else 
-          location_text.setText (new_text);
+          location_text.setText(new_text);
       }
       else 
       {
         final String new_text = location_text.getText ();
-        location_text.setText ("complement(" + new_text + ")");
+        location_text.setText("complement(" + new_text + ")");
       }
     } 
     else 
-      new MessageDialog (this, "complement failed - " +
-                         "current location cannot be parsed");
+      new MessageDialog(this, "complement failed - " +
+                        "current location cannot be parsed");
   }
 
   /**
@@ -860,9 +879,8 @@ public class FeatureEdit extends JFrame
     if(!rationalizeLocation())
     {
       location_text.setText (old_location_text);
-      new MessageDialog (this,
-                         "grab failed - location cannot be parsed after " +
-                         "grabbing");
+      new MessageDialog(this, "grab failed - location cannot be parsed after " +
+                        "grabbing");
     }
   }
 
@@ -900,17 +918,17 @@ public class FeatureEdit extends JFrame
 
     try 
     {
-      location = new Location (location_text.getText ());
+      location = new Location(location_text.getText ());
     }
     catch (LocationParseException e) 
     {
       // this shouldn't happen because we called rationalizeLocation ()
-      throw new Error ("internal error - unexpected exception: " + e);
+      throw new Error("internal error - unexpected exception: " + e);
     }
 
     final Range location_total_range = location.getTotalRange();
 
-    if(!selected_range.overlaps (location_total_range))
+    if(!selected_range.overlaps(location_total_range))
     {
       new MessageDialog(this, "remove range failed - the range you " +
                         "selected does not overlap the feature");
@@ -937,27 +955,27 @@ public class FeatureEdit extends JFrame
     {
       final Range this_range = location_ranges.elementAt(i);
 
-      if(selected_range.overlaps (this_range)) 
+      if(selected_range.overlaps(this_range)) 
       {
         try 
         {
-          if(this_range.contains (selected_range) &&
-             this_range.getStart () != selected_range.getStart () &&
-             this_range.getEnd () != selected_range.getEnd ()) 
+          if(this_range.contains(selected_range) &&
+             this_range.getStart() != selected_range.getStart() &&
+             this_range.getEnd() != selected_range.getEnd()) 
           {
             // chop a piece out of the middle and make two new ranges
             final Range new_start_range =
-                    this_range.change(selected_range.getEnd () + 1,
-                                      this_range.getEnd ());
+                    this_range.change(selected_range.getEnd() + 1,
+                                      this_range.getEnd());
             new_ranges.add(new_start_range);
             final Range new_end_range =
-              this_range.change(this_range.getStart (),
-                                selected_range.getStart () - 1);
+              this_range.change(this_range.getStart(),
+                                selected_range.getStart() - 1);
             new_ranges.add(new_end_range);
           } 
           else
           {
-            if(selected_range.contains (this_range)) {
+            if(selected_range.contains(this_range)) {
               // delete (ie. don't copy) the range
             } 
             else
@@ -998,7 +1016,7 @@ public class FeatureEdit extends JFrame
     final Location new_location =
       new Location(new_ranges, location_is_complemented);
 
-    location_text.setText(new_location.toStringShort ());
+    location_text.setText(new_location.toStringShort());
   }
 
   /**
@@ -1011,8 +1029,8 @@ public class FeatureEdit extends JFrame
   {
     try 
     {
-      final Location location = new Location(location_text.getText ());
-      location_text.setText(location.toStringShort ());
+      final Location location = new Location(location_text.getText());
+      location_text.setText(location.toStringShort());
       return true;
     }
     catch(LocationParseException e) 
@@ -1037,7 +1055,7 @@ public class FeatureEdit extends JFrame
       final String pre_edit_text = qualifier_text_area.getText();
 
       // write to a temporary file
-      final java.util.Date current_time = calendar.getTime();
+      final Date current_time = calendar.getTime();
 
       final String temp_file_name =
                "/tmp/artemis_temp." + current_time.getTime();
@@ -1086,7 +1104,6 @@ public class FeatureEdit extends JFrame
                                 new ProcessWatcher(process, "editor", false);
 
       final Thread watcher_thread = new Thread(process_watcher);
-
       watcher_thread.start();
 
       final ProcessWatcherListener listener = new ProcessWatcherListener()
@@ -1096,21 +1113,17 @@ public class FeatureEdit extends JFrame
           try 
           {
             final FileReader file_reader = new FileReader(temp_file);
-
             final BufferedReader buffered_reader = 
                                      new BufferedReader(file_reader);
 
             final StringBuffer buffer = new StringBuffer();
-
             String line;
 
             while((line = buffered_reader.readLine()) != null) 
               buffer.append(line + "\n");
 
-            final String current_qualifier_text =
-                                       qualifier_text_area.getText();
-
-            if(!current_qualifier_text.equals(pre_edit_text))
+            //ensure current qualifier text has not changed
+            if(!qualifier_text_area.getText().equals(pre_edit_text))
             {
               final String message =
                   "the qualifiers have changed - apply changes from the " +
@@ -1164,7 +1177,6 @@ public class FeatureEdit extends JFrame
   private String getQualifierString() 
   {
     final StringBuffer buffer = new StringBuffer();
-
     final QualifierVector qualifiers = getFeature().getQualifiers();
 
     for(int qualifier_index = 0; qualifier_index < qualifiers.size();
@@ -1199,7 +1211,6 @@ public class FeatureEdit extends JFrame
   private boolean setFeature() 
   {
     final Key key = key_choice.getSelectedItem();
-
     final KeyVector possible_keys = getEntryInformation().getValidKeys();
 
     if(possible_keys != null && !possible_keys.contains(key)) 
@@ -1214,7 +1225,6 @@ public class FeatureEdit extends JFrame
     }
 
     final Location location;
-
     try 
     {
       location = new Location(location_text.getText());
@@ -1223,10 +1233,8 @@ public class FeatureEdit extends JFrame
     {
       final String error_string = exception.getMessage ();
       System.out.println(error_string);
-      new MessageDialog(this,
-                        "Cannot apply changes because of location error: " +
+      new MessageDialog(this, "Cannot apply changes because of location error: " +
                         error_string);
-
       return false;
     }
 
@@ -1242,8 +1250,7 @@ public class FeatureEdit extends JFrame
     {
       final String error_string = exception.getMessage();
       System.out.println(error_string);
-      new MessageDialog(this,
-                        "Cannot apply changes because of a qualifier " +
+      new MessageDialog(this, "Cannot apply changes because of a qualifier " +
                         "error: " + error_string);
       return false;
     }
@@ -1259,8 +1266,7 @@ public class FeatureEdit extends JFrame
       catch(OutOfDateException e) 
       {
         final YesNoDialog dialog =
-          new YesNoDialog(this,
-                          "the feature has changed since the edit " +
+          new YesNoDialog(this, "the feature has changed since the edit " +
                           "window was opened, continue?");
 
         if(dialog.getResult())  // yes - ignore the datestamp
@@ -1278,15 +1284,13 @@ public class FeatureEdit extends JFrame
     } 
     catch(OutOfRangeException e) 
     {
-      new MessageDialog(this,
-                        "Cannot apply changes - the location is out of " +
+      new MessageDialog(this, "Cannot apply changes - the location is out of " +
                         "range for this sequence");
       return false;
     } 
     catch(ReadOnlyException e) 
     {
-      new MessageDialog(this,
-                        "Cannot apply changes - the feature is " +
+      new MessageDialog(this, "Cannot apply changes - the feature is " +
                         "read only");
       return false;
     } 
@@ -1314,7 +1318,7 @@ public class FeatureEdit extends JFrame
    **/
   private void dribble()
   {
-    if(!Options.isUnixHost ()) 
+    if(!Options.isUnixHost()) 
       return;
 
     final String dribble_file_name;
diff --git a/uk/ac/sanger/artemis/components/ProgressThread.java b/uk/ac/sanger/artemis/components/ProgressThread.java
index 54c585e60319a41cd6fffec93e824b4d23ea02be..73608fee83ef86fbe1cbb2102c3a1946a3611a8e 100644
--- a/uk/ac/sanger/artemis/components/ProgressThread.java
+++ b/uk/ac/sanger/artemis/components/ProgressThread.java
@@ -35,6 +35,7 @@ public class ProgressThread extends Thread
   private String msg;
   private JProgressBar progressBar = new JProgressBar();
 
+
   public ProgressThread(JFrame frame, String msg)
   {
     this.frame = frame;
@@ -45,7 +46,7 @@ public class ProgressThread extends Thread
   {
     try
     {
-      progress_frame = new JFrame("Loading...");
+      progress_frame = new JFrame(msg);
       Dimension d = progress_frame.getToolkit().getScreenSize();
       progressBar.setIndeterminate(true);
       progressBar.setBackground(Color.white);
diff --git a/uk/ac/sanger/artemis/editor/Annotation.java b/uk/ac/sanger/artemis/editor/Annotation.java
index c3187e6adca9e50089f599ed1845961f0ef499a9..fcd89aa37be738dc4bb6307fb45474e4f8d1669d 100644
--- a/uk/ac/sanger/artemis/editor/Annotation.java
+++ b/uk/ac/sanger/artemis/editor/Annotation.java
@@ -120,7 +120,7 @@ public class Annotation extends JEditorPane
     text = getDatabaseHTML(text,"SWALL:");
     text = getDatabaseHTML(text,"UNIPROT:");
     text = getDatabaseHTML(text,"EMBL:");
-    setText("<html><body>"+text+"</html></body>");
+    setText("<html><body><font size=3>"+text+"</font></html></body>");
     startRange = getDocument().getLength();
 
   }
diff --git a/uk/ac/sanger/artemis/editor/BigPane.java b/uk/ac/sanger/artemis/editor/BigPane.java
index c634a74093cc1a86a772f46066fc955d36cc2436..8c2b48363adbba80d4c546a56794d3f9ff7f2e2a 100644
--- a/uk/ac/sanger/artemis/editor/BigPane.java
+++ b/uk/ac/sanger/artemis/editor/BigPane.java
@@ -28,10 +28,14 @@ import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
 import java.awt.Dimension;
-import java.awt.Toolkit;
 import java.awt.Font;
-import java.awt.Component;
+import java.awt.Insets;
+import java.awt.Toolkit;
+
 import java.util.Vector;
 
 import javax.swing.*;
@@ -75,7 +79,7 @@ public class BigPane extends JFrame
     addWindowListener(new winExit());
 
     // data set
-    int hgt = getHeight()-60;
+    int hgt = getHeight()-85;
     int wid = getWidth()-100;
     dataView = new DataViewInternalFrame(dataFile,desktop,
                                        wid,qualifier_txt);
@@ -87,9 +91,43 @@ public class BigPane extends JFrame
     JMenuBar menuBar = createMenuBar(desktop);
     setJMenuBar(menuBar);
 
+// toolbar
+    JToolBar toolBar = createToolbar();
+    getContentPane().add(toolBar,BorderLayout.NORTH);
+
     setVisible(true);
   }
 
+
+  /**
+  *
+  * Create a toolbar
+  * @return toolbar.
+  *
+  */
+  private JToolBar createToolbar()
+  {
+    JToolBar toolBar = new JToolBar();
+    
+    JButton applyButt = new JButton("APPLY");
+    applyButt.setToolTipText("Apply annotation changed to feature editor");
+    applyButt.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        qualifier.setText(dataView.getFeatureText());
+      }
+    });
+    applyButt.setBackground(new Color(0,0,81));
+    applyButt.setForeground(Color.white);
+    applyButt.setBorderPainted(false);
+    applyButt.setMargin(new Insets(0,0,0,0));
+    applyButt.setFont(font);
+    toolBar.add(applyButt);
+    
+    return toolBar;
+  }
+
   /**
   *
   * Create a menu bar. 
@@ -133,7 +171,17 @@ public class BigPane extends JFrame
         if(qualifier == null)
           System.exit(0);
 
-        qualifier.setText(dataView.getFeatureText());
+        int ok = JOptionPane.showConfirmDialog(BigPane.this, 
+                              "Apply changes now?",
+                              "Apply Changes",
+                              JOptionPane.YES_NO_CANCEL_OPTION,
+                              JOptionPane.QUESTION_MESSAGE);
+
+        if(ok == JOptionPane.CANCEL_OPTION)
+          return;
+
+        if(ok == JOptionPane.OK_OPTION)
+          qualifier.setText(dataView.getFeatureText());
         BigPane.srsFrame = null;
         dispose();
       }
diff --git a/uk/ac/sanger/artemis/editor/DataViewInternalFrame.java b/uk/ac/sanger/artemis/editor/DataViewInternalFrame.java
index 2dcfa74217df9967e89d2b021c60443f0aea96c8..44330904ee10643bc871cbcafa65ae25dcc660d2 100644
--- a/uk/ac/sanger/artemis/editor/DataViewInternalFrame.java
+++ b/uk/ac/sanger/artemis/editor/DataViewInternalFrame.java
@@ -118,11 +118,11 @@ public class DataViewInternalFrame extends JInternalFrame
     // add annotator text pane
     ann.setAnnotation(annFormat.toString().trim());
     JScrollPane annotationScroll = new JScrollPane(ann);   
-    annotationScroll.setPreferredSize(new Dimension(500,300));
+    annotationScroll.setPreferredSize(new Dimension(500,150));
 
     JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                       annotationScroll,tabPane);
-    split.setDividerLocation(250);
+    split.setDividerLocation(150);
     getContentPane().add(split);
      
     setVisible(true);