diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java b/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
index 55f336e2c9bd79565a47e50c018cd12f7fd86cec..b13fea4c87671637aca478788afd31a4c52421bb 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.common.utilities;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -37,6 +38,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 
 import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel;
+import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.logging.ISimpleLogger;
 
 /**
@@ -70,6 +72,45 @@ public final class FileUtilities
         }
     };
 
+    /**
+     * Copies the content of the specified source file to the specified destination file.
+     * 
+     * @param sourceFile File to be copied.
+     * @param destinationFile File to whom content of <code>sourceFile</code> is copied.
+     * @param preservesLastModifiedDate If <code>true</code> the last modified date of <code>sourceFile</code>
+     *          will be transfered to <code>destinationFile</code>.
+     * @throws EnvironmentFailureException if a {@link IOException} occured.
+     */
+    public static void copyFileTo(File sourceFile, File destinationFile, boolean preservesLastModifiedDate)
+            throws CheckedExceptionTunnel
+    {
+        FileInputStream inputStream = null;
+        FileOutputStream outputStream = null;
+        try
+        {
+            inputStream = new FileInputStream(sourceFile);
+            outputStream = new FileOutputStream(destinationFile);
+            IOUtils.copy(inputStream, outputStream);
+        } catch (IOException ex)
+        {
+            throw new EnvironmentFailureException("Couldn't copy file '" + sourceFile + "' to '" + destinationFile
+                                                  + "'.", ex);
+        } finally
+        {
+            IOUtils.closeQuietly(inputStream);
+            IOUtils.closeQuietly(outputStream);
+        }
+        // In Windows last modified date can only be changed of the output stream is closed
+        if (preservesLastModifiedDate)
+        {
+            boolean successful = destinationFile.setLastModified(sourceFile.lastModified());
+            if (successful == false)
+            {
+                throw new EnvironmentFailureException("Couldn't copy last modified date of file '" + sourceFile
+                        + "' to '" + destinationFile + "' for some unknown reason.");
+            }
+        }
+    }
 
     
     /**
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/FileUtilitiesTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/FileUtilitiesTest.java
index 64767f8b00cb6d9a7cbc4355ab4e4669a3beb61d..5b32c76aaf5b1dd07becf2c56633392259e0e4b0 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/FileUtilitiesTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/FileUtilitiesTest.java
@@ -65,6 +65,19 @@ public class FileUtilitiesTest
         FileUtils.cleanDirectory(workingDirectory);
     }
     
+    @Test
+    public void testCopyFile() throws Exception
+    {
+        File sourceFile = new File(workingDirectory, "source.txt");
+        FileUtilities.writeToFile(sourceFile, "hello world!");
+        sourceFile.setLastModified(47110000);
+        assertEquals(47110000, sourceFile.lastModified());
+        File destinationFile = new File(workingDirectory, "destination.txt");
+        FileUtilities.copyFileTo(sourceFile, destinationFile, true);
+        assertEquals(FileUtilities.loadToString(sourceFile), FileUtilities.loadToString(destinationFile));
+        assertEquals(47110000, destinationFile.lastModified());
+    }
+    
     @Test
     public void testWriteToFile() throws Exception
     {