diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ITopLevelDataSetRegistratorDelegate.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ITopLevelDataSetRegistratorDelegate.java
index 1c5fe6222992eba18d9a777f502edf872b1584bc..500ca1a92401d9a1024008c1cdcca64d200c4445 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ITopLevelDataSetRegistratorDelegate.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ITopLevelDataSetRegistratorDelegate.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver;
 
 import java.util.List;
 
+import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 
 /**
@@ -28,4 +29,6 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 public interface ITopLevelDataSetRegistratorDelegate
 {
     void didRegisterDataSets(List<DataSetInformation> dataSetInformations);
+
+    DataSetRegistrationPreStagingBehavior getPrestagingBehavior();
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java
index 43d41a7eec656a17b77eaa74832f380ff0bbe096..ec4c5fe33eb85916dd5777b93e37ace3c3c625ed 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetTopLevelDataSetHandler.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.io.ConcatenatedFileOutputStreamWriter;
 import ch.systemsx.cisd.etlserver.ITopLevelDataSetRegistrator;
 import ch.systemsx.cisd.etlserver.ITopLevelDataSetRegistratorDelegate;
+import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO;
@@ -70,6 +71,12 @@ class PutDataSetTopLevelDataSetHandler
             registeredDataSets.addAll(dataSetInformations);
         }
 
+        @Override
+        public DataSetRegistrationPreStagingBehavior getPrestagingBehavior()
+        {
+            return DataSetRegistrationPreStagingBehavior.USE_ORIGINAL;
+        }
+
     }
 
     // General State
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
index 9d5691c455859aceacf553bf74ad553543c7af46..53f3318ca594b8698d9d1fd6654196bcbef1e914 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
@@ -233,12 +233,24 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
 
     public static class NoOpDelegate implements ITopLevelDataSetRegistratorDelegate
     {
+        private final DataSetRegistrationPreStagingBehavior preStagingBehavior;
+
+        public NoOpDelegate(DataSetRegistrationPreStagingBehavior preStagingBehavior)
+        {
+            this.preStagingBehavior = preStagingBehavior;
+        }
 
         @Override
         public void didRegisterDataSets(List<DataSetInformation> dataSetInformations)
         {
         }
 
+        @Override
+        public DataSetRegistrationPreStagingBehavior getPrestagingBehavior()
+        {
+            return preStagingBehavior;
+        }
+
     }
 
     protected final OmniscientTopLevelDataSetRegistratorState state;
@@ -367,7 +379,8 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
         if (preStagingUsage == DataSetRegistrationPreStagingBehavior.USE_ORIGINAL)
         {
             DataSetFile incoming = new DataSetFile(incomingDataSetFile);
-            handle(incoming, null, new NoOpDelegate(), markerFileCleanupAction);
+            handle(incoming, null, new NoOpDelegate(
+                    DataSetRegistrationPreStagingBehavior.USE_ORIGINAL), markerFileCleanupAction);
         } else
         {
             // If we should the prestaging phase, we make a hardlink copy in prestaging area
@@ -378,7 +391,9 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
             // For cleanup we use the postRegistrationCleanUpAction wich clears the prestaging area.
             PostRegistrationCleanUpAction cleanupAction =
                     new PostRegistrationCleanUpAction(dsf, markerFileCleanupAction);
-            handle(dsf, null, new NoOpDelegate(), cleanupAction);
+            handle(dsf, null,
+                    new NoOpDelegate(DataSetRegistrationPreStagingBehavior.USE_PRESTAGING),
+                    cleanupAction);
         }
     }
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
index d64d702b0ec60068d6df645e2cbfa4f97b98f7d3..7e0b1b411986ea612f83d54ea8b4495226f40757 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetRegistrationService.java
@@ -347,8 +347,8 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
             } else if (dataSetInformation.isLinkDataSet())
             {
                 algorithm =
-                        new LinkDataSetStorageAlgorithm<T>(dataSetFile, dataSetDetails,
-                                strategy, registratorContext.getStorageProcessor(),
+                        new LinkDataSetStorageAlgorithm<T>(dataSetFile, dataSetDetails, strategy,
+                                registratorContext.getStorageProcessor(),
                                 globalContext.getDataSetValidator(), globalContext.getDssCode(),
                                 registratorContext.getFileOperations(),
                                 globalContext.getMailClient(), stagingDirectory, precommitDirectory);
@@ -447,4 +447,9 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
         return incomingDataSetFile;
     }
 
+    public boolean shouldUsePrestaging()
+    {
+        return delegate.getPrestagingBehavior() == DataSetRegistrationPreStagingBehavior.USE_PRESTAGING;
+    }
+
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
index 7d20982bce93469d4d828b8550c849ccce4dc30f..fd3e329567764298034a884850f1c8b55e7526f5 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
@@ -37,6 +37,7 @@ import ch.systemsx.cisd.etlserver.registrator.DataSetFile;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPersistentMap;
+import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService;
 import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithmRunner;
 import ch.systemsx.cisd.etlserver.registrator.IDataSetOnErrorActionDecision.ErrorType;
@@ -542,19 +543,34 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem
         IEntityOperationService<T> entityRegistrationService =
                 registrationService.getEntityRegistrationService();
 
-        File realIncomingFile = getIncomingDataSetFile().getRealIncomingFile();
-        if (false == realIncomingFile.exists())
+        verifyOriginalFileIsStillAvailable();
+
+        entityRegistrationService.performOperationsInApplcationServer(registrationDetails);
+    }
+
+    /**
+     * If we use prestaging, then we check that the original file has not been deleted.
+     */
+    private void verifyOriginalFileIsStillAvailable()
+    {
+        if (false == registrationService.shouldUsePrestaging())
         {
-            StringBuilder sb = new StringBuilder();
-            sb.append("Incoming file [");
-            sb.append(realIncomingFile.getAbsolutePath());
-            sb.append("] ");
-            sb.append(" was deleted before registration.");
+            return;
+        }
 
-            throw new IncomingFileDeletedBeforeRegistrationException(sb.toString());
+        File realIncomingFile = getIncomingDataSetFile().getRealIncomingFile();
+        if (realIncomingFile.exists())
+        {
+            return;
         }
 
-        entityRegistrationService.performOperationsInApplcationServer(registrationDetails);
+        StringBuilder sb = new StringBuilder();
+        sb.append("Incoming file [");
+        sb.append(realIncomingFile.getAbsolutePath());
+        sb.append("] ");
+        sb.append(" was deleted before registration.");
+
+        throw new IncomingFileDeletedBeforeRegistrationException(sb.toString());
     }
 
     @Override
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
index 66fe972d75dd5eedc0a0067b66426ee8a443d00b..83d555e40a1c374af7a5a010d82f297cbbb00e29 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
@@ -47,6 +47,7 @@ import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState;
 import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator;
 import ch.systemsx.cisd.etlserver.registrator.DataSetFile;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
+import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService;
 import ch.systemsx.cisd.etlserver.registrator.IDataSetRegistrationDetailsFactory;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSet;
@@ -703,7 +704,8 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa
                 DataSetFile dataSetFile)
         {
             return createDataSetRegistrationService(dataSetFile, null,
-                    new DoNothingDelegatedAction(), new NoOpDelegate());
+                    new DoNothingDelegatedAction(), new NoOpDelegate(
+                            DataSetRegistrationPreStagingBehavior.USE_ORIGINAL));
         }
 
         /**