diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
index e9c1979332388e275aff58148dd33a83cb9c1de3..655ff02b9fad0973786f5d2e1b659cfa5fbfc8e8 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
@@ -89,11 +89,27 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
     static class LiveTransactionState<T extends DataSetInformation> extends
             AbstractTransactionState<T> implements RollbackStack.IRollbackStackDelegate
     {
-        // Wait for up to 5 minutes for the file system to become available
-        private static final int MAX_DIRECTORY_AVAILABLE_WAIT_COUNT = 6 * 5;
+        // Default to polling every 10 seconds and waiting for up to 5 minutes
+        private static int fileSystemAvailablityWaitCount = 6 * 5;
 
-        // Poll every 10 seconds
-        private static final int STAGING_DIR_AVAILABILITY_POLLING_WAIT_TIME = 10 * 1000;
+        private static int fileSystemAvailablityPollingWaitTimeMs = 10 * 1000;
+
+        /**
+         * These two variables determine together how long the rollback mechanism waits for a file
+         * system that has become unavailable and how often it checks for the file system to become
+         * available.
+         * <p>
+         * The duration the rollback mechanism will wait before giving up equals waitTimeMS *
+         * waitCount;
+         * <p>
+         * Made public for testing.
+         */
+        public static void setFileSystemAvailabilityPollingWaitTimeAndWaitCount(int waitTimeMS,
+                int waitCount)
+        {
+            fileSystemAvailablityWaitCount = waitTimeMS;
+            fileSystemAvailablityPollingWaitTimeMs = waitCount;
+        }
 
         // Keeps track of steps that have been executed and may need to be reverted. Elements are
         // kept in the order they need to be reverted.
@@ -680,12 +696,11 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
             if (null != FileUtilities.checkDirectoryFullyAccessible(stagingDirectory, "staging"))
             {
                 boolean keepPolling = true;
-                for (int waitCount = 0; waitCount < MAX_DIRECTORY_AVAILABLE_WAIT_COUNT
-                        && keepPolling; ++waitCount)
+                for (int waitCount = 0; waitCount < fileSystemAvailablityWaitCount && keepPolling; ++waitCount)
                 {
                     try
                     {
-                        Thread.sleep(STAGING_DIR_AVAILABILITY_POLLING_WAIT_TIME);
+                        Thread.sleep(fileSystemAvailablityPollingWaitTimeMs);
                         // If the directory is not accessible (i.e., return not null), wait again
                         keepPolling =
                                 (null != FileUtilities.checkDirectoryFullyAccessible(
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 3876217f826d148d5205b6a0ecde351eeba787fc..87c3994012ae63313235cca99008239ccd869f30 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
@@ -97,7 +97,6 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem
     {
         File[] rollbackQueue1Files = rollBackStackParentFolder.listFiles(new FilenameFilter()
             {
-
                 public boolean accept(File dir, String name)
                 {
                     return name.endsWith(ROLLBACK_QUEUE1_FILE_NAME_SUFFIX);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/RollbackConfigurator.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/RollbackConfigurator.java
new file mode 100644
index 0000000000000000000000000000000000000000..510fd5995bfc312f9737815c30f39133f5c53d28
--- /dev/null
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/RollbackConfigurator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.etlserver.registrator.api.v1.impl;
+
+/**
+ * A public class for setting rollback configuration variables (which are stored in package-visible
+ * classes).
+ * 
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class RollbackConfigurator
+{
+    /**
+     * These two variables determine together how long the rollback mechanism waits for a file
+     * system that has become unavailable and how often it checks for the file system to become
+     * available.
+     * <p>
+     * The duration the rollback mechanism will wait before giving up equals waitTimeMS * waitCount;
+     * <p>
+     * Made public for testing.
+     */
+    public static void setFileSystemAvailabilityPollingWaitTimeAndWaitCount(int waitTimeMS,
+            int waitCount)
+    {
+        ch.systemsx.cisd.etlserver.registrator.api.v1.impl.AbstractTransactionState.LiveTransactionState
+                .setFileSystemAvailabilityPollingWaitTimeAndWaitCount(waitTimeMS, waitCount);
+    }
+}
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
index 5facd9fa7b5dca8befe90347385b6205c469f81e..bed4ca8a2ee29ab27bab82a50f19c093103bf592 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
@@ -110,6 +110,8 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste
     public void init()
     {
         QueueingPathRemoverService.start();
+        ch.systemsx.cisd.etlserver.registrator.api.v1.impl.RollbackConfigurator
+                .setFileSystemAvailabilityPollingWaitTimeAndWaitCount(10, 1);
     }
 
     @AfterTest
@@ -238,7 +240,7 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste
         return threadProperties;
     }
 
-    public static final class MockStorageProcessor implements IStorageProcessorTransactional,
+    public static class MockStorageProcessor implements IStorageProcessorTransactional,
             Serializable
     {
         private static final long serialVersionUID = 1L;
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorRollbackTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorRollbackTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..90ddfa01a4554ce345f982661ededd4699bde364
--- /dev/null
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorRollbackTest.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.etlserver.registrator;
+
+import static ch.systemsx.cisd.common.Constants.IS_FINISHED_PREFIX;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.hamcrest.core.IsAnything;
+import org.jmock.Expectations;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
+import ch.systemsx.cisd.common.filesystem.FileUtilities;
+import ch.systemsx.cisd.common.mail.IMailClient;
+import ch.systemsx.cisd.common.utilities.ExtendedProperties;
+import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional;
+import ch.systemsx.cisd.etlserver.ITypeExtractor;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
+
+/**
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class JythonTopLevelDataSetRegistratorRollbackTest extends AbstractJythonDataSetHandlerTest
+{
+    private static final String SCRIPTS_FOLDER =
+            "sourceTest/java/ch/systemsx/cisd/etlserver/registrator/";
+
+    private static final String DATA_SET_CODE = "data-set-code";
+
+    private static final DataSetType DATA_SET_TYPE = new DataSetType("O1");
+
+    private static final String EXPERIMENT_IDENTIFIER = "/SPACE/PROJECT/EXP";
+
+    @BeforeMethod
+    @Override
+    public void setUp() throws IOException
+    {
+        super.setUp();
+
+        didDataSetRollbackHappen = false;
+        didServiceRollbackHappen = false;
+    }
+
+    @Test
+    public void testSimpleTransactionRollback()
+    {
+        setUpHomeDataBaseExpectations();
+        Properties properties =
+                createThreadPropertiesRelativeToScriptsFolder("simple-transaction.py");
+        properties.setProperty(IStorageProcessorTransactional.STORAGE_PROCESSOR_KEY,
+                MockStorageProcessor.class.getName());
+
+        createHandler(properties, false, false);
+        createData();
+        ExperimentBuilder builder = new ExperimentBuilder().identifier(EXPERIMENT_IDENTIFIER);
+        final Experiment experiment = builder.getExperiment();
+        context.checking(new Expectations()
+            {
+                {
+                    one(openBisService).createDataSetCode();
+                    will(returnValue(DATA_SET_CODE));
+                    atLeast(1).of(openBisService).tryToGetExperiment(
+                            new ExperimentIdentifierFactory(experiment.getIdentifier())
+                                    .createIdentifier());
+                    will(returnValue(experiment));
+
+                    one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
+                    one(openBisService)
+                            .performEntityOperations(
+                                    with(new IsAnything<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>()));
+                    will(throwException(new AssertionError("Fail")));
+                }
+            });
+
+        try
+        {
+            handler.handle(markerFile);
+            fail("No IOException thrown");
+        } catch (IOExceptionUnchecked e)
+        {
+            // Make the file system available again and rollback
+            makeFileSystemAvailable(workingDirectory);
+            DataSetRegistrationTransaction.rollbackDeadTransactions(workingDirectory);
+        }
+        assertEquals(1, MockStorageProcessor.instance.incomingDirs.size());
+        assertEquals(0, MockStorageProcessor.instance.calledCommitCount);
+        assertEquals("[]", Arrays.asList(stagingDirectory.list()).toString());
+        assertEquals(
+                "hello world1",
+                FileUtilities.loadToString(
+                        new File(workingDirectory, "data_set/sub_data_set_1/read1.me")).trim());
+        assertEquals(
+                "hello world2",
+                FileUtilities.loadToString(
+                        new File(workingDirectory, "data_set/sub_data_set_2/read2.me")).trim());
+
+        TestingDataSetHandler theHandler = (TestingDataSetHandler) handler;
+        assertFalse(theHandler.didRollbackDataSetRegistrationFunctionRun);
+        assertFalse(theHandler.didRollbackServiceFunctionRun);
+        assertTrue(theHandler.didTransactionRollbackHappen);
+        assertTrue(theHandler.didRollbackTransactionFunctionRunHappen);
+
+        context.assertIsSatisfied();
+    }
+
+    private void createData()
+    {
+        incomingDataSetFile = createDirectory(workingDirectory, "data_set");
+
+        subDataSet1 = createDirectory(incomingDataSetFile, "sub_data_set_1");
+        subDataSet2 = createDirectory(incomingDataSetFile, "sub_data_set_2");
+
+        FileUtilities.writeToFile(new File(subDataSet1, "read1.me"), "hello world1");
+        FileUtilities.writeToFile(new File(subDataSet2, "read2.me"), "hello world2");
+
+        markerFile = new File(workingDirectory, IS_FINISHED_PREFIX + "data_set");
+        FileUtilities.writeToFile(markerFile, "");
+    }
+
+    @Override
+    protected String getRegistrationScriptsFolderPath()
+    {
+        return SCRIPTS_FOLDER;
+    }
+
+    protected SearchCriteria createTestSearchCriteria(String typeString)
+    {
+        SearchCriteria sc = new SearchCriteria();
+        sc.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.TYPE, typeString));
+        sc.addMatchClause(MatchClause.createPropertyMatch("PROP", "VALUE"));
+        return sc;
+    }
+
+    public static final class MockStorageProcessor extends
+            AbstractJythonDataSetHandlerTest.MockStorageProcessor
+    {
+        private static final long serialVersionUID = 1L;
+
+        static MockStorageProcessor instance;
+
+        int calledGetStoreRootDirectoryCount = 0;
+
+        int calledCommitCount = 0;
+
+        File storeRootDirectory;
+
+        String dataSetInfoString;
+
+        protected List<File> incomingDirs = new ArrayList<File>();
+
+        protected List<File> rootDirs = new ArrayList<File>();
+
+        public MockStorageProcessor(ExtendedProperties props)
+        {
+            super(props);
+            instance = this;
+        }
+
+        public File getStoreRootDirectory()
+        {
+            calledGetStoreRootDirectoryCount++;
+            return storeRootDirectory;
+        }
+
+        public void setStoreRootDirectory(File storeRootDirectory)
+        {
+            this.storeRootDirectory = storeRootDirectory;
+        }
+
+        public StorageFormat getStorageFormat()
+        {
+            return StorageFormat.PROPRIETARY;
+        }
+
+        public UnstoreDataAction getDefaultUnstoreDataAction(Throwable exception)
+        {
+            return UnstoreDataAction.LEAVE_UNTOUCHED;
+        }
+
+        public IStorageProcessorTransaction createTransaction(
+                StorageProcessorTransactionParameters parameters)
+        {
+            final File rootDir = parameters.getRootDir();
+            dataSetInfoString = parameters.getDataSetInformation().toString();
+            return new IStorageProcessorTransaction()
+                {
+
+                    private static final long serialVersionUID = 1L;
+
+                    private File storedFolder;
+
+                    public void storeData(ITypeExtractor typeExtractor, IMailClient mailClient,
+                            File incomingDataSetFile)
+                    {
+
+                        incomingDirs.add(incomingDataSetFile);
+                        rootDirs.add(rootDir);
+
+                        try
+                        {
+                            if (incomingDataSetFile.isDirectory())
+                            {
+                                FileUtils.moveDirectoryToDirectory(incomingDataSetFile, new File(
+                                        rootDir, "original"), true);
+                            } else
+                            {
+                                FileUtils.moveFileToDirectory(incomingDataSetFile, new File(
+                                        rootDir, "original"), false);
+                            }
+                            makeFileSystemUnavailable(getStoreRootDirectory());
+                        } catch (IOException ex)
+                        {
+                            throw new IOExceptionUnchecked(ex);
+                        }
+                        storedFolder = rootDir;
+                    }
+
+                    public UnstoreDataAction rollback(Throwable exception)
+                    {
+                        return null;
+                    }
+
+                    public File getStoredDataDirectory()
+                    {
+                        return storedFolder;
+                    }
+
+                    public void commit()
+                    {
+                        calledCommitCount++;
+                    }
+
+                    public File tryGetProprietaryData()
+                    {
+                        return null;
+                    }
+                };
+        }
+    }
+
+    /**
+     * Simulate the file system becoming unavailable
+     */
+    private static void makeFileSystemUnavailable(File storeRootDirectory)
+    {
+        new File(storeRootDirectory, "1").renameTo(new File(storeRootDirectory, "1.unavailable"));
+
+        new File(storeRootDirectory, "staging").renameTo(new File(storeRootDirectory,
+                "staging.unavailable"));
+    }
+
+    /**
+     * Simulate the file system becoming available again
+     */
+    private static void makeFileSystemAvailable(File storeRootDirectory)
+    {
+        new File(storeRootDirectory, "1.unavailable").renameTo(new File(storeRootDirectory, "1"));
+
+        new File(storeRootDirectory, "staging.unavailable").renameTo(new File(storeRootDirectory,
+                "staging"));
+    }
+}
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
index 7b4d0c1544e86442e301e881031df76b939b9e60..562ffd31ffda45bd18590bc53370978d8e936f4e 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
@@ -99,8 +99,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("simple-transaction.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
 
@@ -119,7 +117,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(experiment));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
                 }
@@ -149,7 +147,8 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         assertEquals(1, MockStorageProcessor.instance.calledCommitCount);
         assertEquals(datasetLocation, MockStorageProcessor.instance.rootDirs.get(0));
         File incomingDir = MockStorageProcessor.instance.incomingDirs.get(0);
-        assertEquals(new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"), incomingDir);
+        assertEquals(new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"),
+                incomingDir);
         assertEquals("hello world1",
                 FileUtilities.loadToString(new File(datasetLocation, "read1.me")).trim());
         context.assertIsSatisfied();
@@ -161,8 +160,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("simple-transaction-rollback.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, true, false);
         createData();
         ExperimentBuilder builder = new ExperimentBuilder().identifier(EXPERIMENT_IDENTIFIER);
@@ -182,7 +179,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         handler.handle(markerFile);
         assertEquals(0, MockStorageProcessor.instance.incomingDirs.size());
         assertEquals(0, MockStorageProcessor.instance.calledCommitCount);
-        assertEquals("[]", Arrays.asList(stagingDir.list()).toString());
+        assertEquals("[]", Arrays.asList(stagingDirectory.list()).toString());
         assertEquals(
                 "hello world1",
                 FileUtilities.loadToString(
@@ -209,8 +206,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("simple-transaction.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, false);
         createData();
         ExperimentBuilder builder = new ExperimentBuilder().identifier(EXPERIMENT_IDENTIFIER);
@@ -226,7 +221,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(experiment));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
                     one(openBisService)
                             .performEntityOperations(
                                     with(new IsAnything<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>()));
@@ -237,7 +232,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         handler.handle(markerFile);
         assertEquals(1, MockStorageProcessor.instance.incomingDirs.size());
         assertEquals(0, MockStorageProcessor.instance.calledCommitCount);
-        assertEquals("[]", Arrays.asList(stagingDir.list()).toString());
+        assertEquals("[]", Arrays.asList(stagingDirectory.list()).toString());
         assertEquals(
                 "hello world1",
                 FileUtilities.loadToString(
@@ -262,8 +257,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("two-simple-datasets.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
         ExperimentBuilder builder1 = new ExperimentBuilder().identifier("/SPACE/PROJECT/EXP1");
@@ -283,8 +276,10 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                                     .createIdentifier());
                     will(returnValue(experiment1));
 
-                    one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE + 1), "sub_data_set_1"));
+                    one(dataSetValidator).assertValidDataSet(
+                            DATA_SET_TYPE,
+                            new File(new File(stagingDirectory, DATA_SET_CODE + 1),
+                                    "sub_data_set_1"));
 
                     one(openBisService).createDataSetCode();
                     will(returnValue(DATA_SET_CODE + 2));
@@ -294,8 +289,10 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                                     .createIdentifier());
                     will(returnValue(experiment2));
 
-                    one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE + 2), "sub_data_set_2"));
+                    one(dataSetValidator).assertValidDataSet(
+                            DATA_SET_TYPE,
+                            new File(new File(stagingDirectory, DATA_SET_CODE + 2),
+                                    "sub_data_set_2"));
 
                     one(openBisService).performEntityOperations(with(operations));
                     will(returnValue(new AtomicEntityOperationResult()));
@@ -324,7 +321,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                 datasetLocation1), dataSet1.getLocation());
         assertEquals(datasetLocation1, MockStorageProcessor.instance.rootDirs.get(0));
         File incomingDir1 = MockStorageProcessor.instance.incomingDirs.get(0);
-        assertEquals(new File(new File(stagingDir, DATA_SET_CODE + 1), "sub_data_set_1"),
+        assertEquals(new File(new File(stagingDirectory, DATA_SET_CODE + 1), "sub_data_set_1"),
                 incomingDir1);
         assertEquals("hello world1",
                 FileUtilities.loadToString(new File(datasetLocation1, "read1.me")).trim());
@@ -341,7 +338,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                 datasetLocation2), dataSet2.getLocation());
         assertEquals(datasetLocation2, MockStorageProcessor.instance.rootDirs.get(1));
         File incomingDir2 = MockStorageProcessor.instance.incomingDirs.get(1);
-        assertEquals(new File(new File(stagingDir, DATA_SET_CODE + 2), "sub_data_set_2"),
+        assertEquals(new File(new File(stagingDirectory, DATA_SET_CODE + 2), "sub_data_set_2"),
                 incomingDir2);
         assertEquals("hello world2",
                 FileUtilities.loadToString(new File(datasetLocation2, "read2.me")).trim());
@@ -354,8 +351,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("transaction-with-new-experiment.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
         final RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails> atomicatOperationDetails =
@@ -370,7 +365,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(EXPERIMENT_PERM_ID));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
                 }
@@ -402,7 +397,8 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         assertEquals(1, MockStorageProcessor.instance.calledCommitCount);
         assertEquals(datasetLocation, MockStorageProcessor.instance.rootDirs.get(0));
         File incomingDir = MockStorageProcessor.instance.incomingDirs.get(0);
-        assertEquals(new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"), incomingDir);
+        assertEquals(new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"),
+                incomingDir);
         context.assertIsSatisfied();
     }
 
@@ -412,8 +408,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("transaction-with-new-sample.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
         final RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails> atomicatOperationDetails =
@@ -431,7 +425,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(SAMPLE_PERM_ID));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
                 }
@@ -475,7 +469,8 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         assertEquals(1, MockStorageProcessor.instance.calledCommitCount);
         assertEquals(datasetLocation, MockStorageProcessor.instance.rootDirs.get(0));
         File incomingDir = MockStorageProcessor.instance.incomingDirs.get(0);
-        assertEquals(new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"), incomingDir);
+        assertEquals(new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"),
+                incomingDir);
         context.assertIsSatisfied();
     }
 
@@ -485,8 +480,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("transaction-with-new-material.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
 
@@ -506,7 +499,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(experiment));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "sub_data_set_1"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1"));
                     one(openBisService).performEntityOperations(with(atomicatOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));
                 }
@@ -544,8 +537,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
         setUpHomeDataBaseExpectations();
         Properties properties =
                 createThreadPropertiesRelativeToScriptsFolder("transaction-with-dataset-update.py");
-        final File stagingDir = new File(workingDirectory, "staging");
-        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
         createHandler(properties, false, true);
         createData();
 
@@ -572,7 +563,7 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractJythonDataSetH
                     will(returnValue(containerDataSet));
 
                     one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
-                            new File(new File(stagingDir, DATA_SET_CODE), "data_set"));
+                            new File(new File(stagingDirectory, DATA_SET_CODE), "data_set"));
 
                     one(openBisService).performEntityOperations(with(atomicOperationDetails));
                     will(returnValue(new AtomicEntityOperationResult()));