diff --git a/uk/ac/sanger/artemis/components/EntryFileDialog.java b/uk/ac/sanger/artemis/components/EntryFileDialog.java
index 75d6edd13f16a4cf796eebece2b42ff06476179e..82bc5047497672f8a9dbb326d7ba8cda4587f9e6 100644
--- a/uk/ac/sanger/artemis/components/EntryFileDialog.java
+++ b/uk/ac/sanger/artemis/components/EntryFileDialog.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/EntryFileDialog.java,v 1.3 2004-12-03 17:47:04 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/EntryFileDialog.java,v 1.4 2005-09-05 13:35:55 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components;
@@ -32,6 +32,7 @@ import uk.ac.sanger.artemis.io.DocumentEntryFactory;
 import uk.ac.sanger.artemis.io.ReadFormatException;
 import uk.ac.sanger.artemis.io.EntryInformation;
 import uk.ac.sanger.artemis.io.EntryInformationException;
+import uk.ac.sanger.artemis.io.DocumentEntry;
 
 import java.io.*;
 import javax.swing.*;
@@ -40,7 +41,7 @@ import javax.swing.*;
  *  This class is a JFileChooser that can read EMBL Entry objects.
  *
  *  @author Kim Rutherford
- *  @version $Id: EntryFileDialog.java,v 1.3 2004-12-03 17:47:04 tjc Exp $
+ *  @version $Id: EntryFileDialog.java,v 1.4 2005-09-05 13:35:55 tjc Exp $
  **/
 
 public class EntryFileDialog extends StickyFileChooser 
@@ -348,13 +349,20 @@ public class EntryFileDialog extends StickyFileChooser
                   final boolean keep_new_name,
                   final int destination_type) 
   {
+
+    JCheckBox remoteSave = new JCheckBox("Ssh/Remote Save",
+                                         true);
+    File file = null;
+
     try 
     {
       if(ask_for_name || entry.getName() == null) 
       {
+        Box yBox = Box.createVerticalBox();
+        boolean useAccessory = false;
+
         JCheckBox emblHeader = new JCheckBox("Add EMBL Header",
                                              false);
-        emblHeader.setSelected(false);
 
         setDialogTitle("Save to ...");
         setDialogType(JFileChooser.SAVE_DIALOG);
@@ -362,7 +370,21 @@ public class EntryFileDialog extends StickyFileChooser
         if( destination_type == DocumentEntryFactory.EMBL_FORMAT &&
            (entry.getHeaderText() == null ||
            !isHeaderEMBL(entry.getHeaderText())) )
-          setAccessory(emblHeader);
+        {
+          yBox.add(emblHeader);
+          useAccessory = true;
+        }
+
+        if(((DocumentEntry)entry.getEMBLEntry()).getDocument() 
+                                       instanceof RemoteFileDocument)
+        {
+          yBox.add(remoteSave);
+          useAccessory = true;
+        }
+
+        if(useAccessory)
+          setAccessory(yBox);
+
         int status = showSaveDialog(owner);
 
         if(status != JFileChooser.APPROVE_OPTION ||
@@ -391,7 +413,7 @@ public class EntryFileDialog extends StickyFileChooser
           }
         }
 
-        File file = new File(getCurrentDirectory(),
+        file = new File(getCurrentDirectory(),
                         getSelectedFile().getName());
 
         if(file.exists()) 
@@ -478,6 +500,20 @@ public class EntryFileDialog extends StickyFileChooser
       new MessageDialog(owner, "error while saving: " + e);
       return;
     }
+
+    // save it back to ssh server
+    if(((DocumentEntry)entry.getEMBLEntry()).getDocument()
+                                   instanceof RemoteFileDocument &&
+        remoteSave.isSelected())
+    {
+       RemoteFileDocument node =
+           (RemoteFileDocument)(((DocumentEntry)entry.getEMBLEntry()).getDocument());
+
+       if(file == null)
+         file = new File( ((DocumentEntry)entry.getEMBLEntry()).getDocument().toString() );
+       node.saveEntry(file);
+    }
+
   }
 
   /**
diff --git a/uk/ac/sanger/artemis/components/filetree/RemoteFileNode.java b/uk/ac/sanger/artemis/components/filetree/RemoteFileNode.java
index ee1b28c93e83d9bbe78dc3d8c4a6e2897af54407..7dcdfff78ebb9bc6f9baad2b6446adad58222072 100644
--- a/uk/ac/sanger/artemis/components/filetree/RemoteFileNode.java
+++ b/uk/ac/sanger/artemis/components/filetree/RemoteFileNode.java
@@ -209,12 +209,16 @@ public class RemoteFileNode extends DefaultMutableTreeNode
     return flist.rename(getRootDir()+"/"+getFullName(), new_file);
   }
 
-  protected boolean put(File local_file, FTProgress monitor)
+  public boolean put(File local_file, FTProgress monitor)
   {
     FileList flist = new FileList();
-    final String dir;
+    String dir;
     if(!isDirectory())
-      dir = getRootDir();
+    {
+      dir = getRootDir()+"/"+getFullName();
+      int index = dir.lastIndexOf("/");
+      dir = dir.substring(0,index);
+    }
     else
       dir = getRootDir()+"/"+getFullName();
 
diff --git a/uk/ac/sanger/artemis/util/RemoteFileDocument.java b/uk/ac/sanger/artemis/util/RemoteFileDocument.java
index 8e6a1c063c68eff327cb7b72aa4bbd79e3334299..5ae1de778b273a278f9382e0c08d49b455bc397c 100644
--- a/uk/ac/sanger/artemis/util/RemoteFileDocument.java
+++ b/uk/ac/sanger/artemis/util/RemoteFileDocument.java
@@ -27,6 +27,7 @@ package uk.ac.sanger.artemis.util;
 import java.io.*;
 import javax.swing.JOptionPane;
 import uk.ac.sanger.artemis.components.filetree.*;
+import uk.ac.sanger.artemis.components.SwingWorker;
 import uk.ac.sanger.artemis.j2ssh.FileTransferProgressMonitor;
 import uk.ac.sanger.artemis.j2ssh.FTProgress;
 
@@ -154,10 +155,39 @@ public class RemoteFileDocument extends Document
       return file_output_stream;
   }
 
+  /**
+  *
+  * Save the entry back to the ssh server
+  *
+  */
+  public void saveEntry(final File local_file)
+  {
+    SwingWorker putWorker = new SwingWorker()
+    {
+      FileTransferProgressMonitor monitor;
+      public Object construct()
+      {
+        monitor = new FileTransferProgressMonitor(null);
+        FTProgress progress = monitor.add(local_file.getName());
+
+        getRemoteFileNode().put(local_file, progress);
+        monitor.close();
+        return null;
+      }
+
+      public void finished()
+      {
+        if(monitor != null)
+          monitor.close();
+      }
+    };
+    putWorker.start();
+  }
+
   /**
    *  Return the RemoteFileNode object that this RemoteFileDocument is encapsulating.
    **/
-  private RemoteFileNode getRemoteFileNode() 
+  public RemoteFileNode getRemoteFileNode() 
   {
     return (RemoteFileNode)getLocation();
   }