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 5865ef39ca50bd262f9e44bc997cc9d0cc5939f9..2a35ab2481659a505ffda56cb02771befcc56f09 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
@@ -34,8 +34,6 @@ import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.utilities.IDelegatedActionWithResult;
 import ch.systemsx.cisd.etlserver.AbstractTopLevelDataSetRegistrator;
-import ch.systemsx.cisd.etlserver.DataSetRegistrationAlgorithm;
-import ch.systemsx.cisd.etlserver.DataSetRegistrationRollbacker;
 import ch.systemsx.cisd.etlserver.DataStrategyStore;
 import ch.systemsx.cisd.etlserver.IDataStrategyStore;
 import ch.systemsx.cisd.etlserver.IPostRegistrationAction;
@@ -319,23 +317,6 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
                 .runCheck();
     }
 
-    /**
-     * Rollback a failure when trying to register an individual data set.
-     * <p>
-     * Subclasses may override, but should call super.
-     * 
-     * @param dataSetRegistrationService
-     */
-    public void rollback(DataSetRegistrationService<T> dataSetRegistrationService,
-            DataSetRegistrationAlgorithm registrationAlgorithm, Throwable throwable)
-    {
-        updateStopped(throwable instanceof InterruptedExceptionUnchecked);
-
-        new DataSetRegistrationRollbacker(stopped, registrationAlgorithm,
-                registrationAlgorithm.getIncomingDataSetFile(), notificationLog, operationLog,
-                throwable).doRollback();
-    }
-
     /**
      * Rollback a failure when trying to commit a transaction.
      * <p>
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 2f88d25b8d8ba233770665667bc8723f54d99762..fc80fe662940513979110205f904a759bf13e47b 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
@@ -25,7 +25,6 @@ import ch.systemsx.cisd.common.utilities.IDelegatedActionWithResult;
 import ch.systemsx.cisd.common.utilities.PropertyUtils;
 import ch.systemsx.cisd.etlserver.BaseDirectoryHolder;
 import ch.systemsx.cisd.etlserver.DataSetRegistrationAlgorithm;
-import ch.systemsx.cisd.etlserver.DataSetRegistrationAlgorithm.DataSetRegistrationAlgorithmState;
 import ch.systemsx.cisd.etlserver.DataSetRegistrationAlgorithmRunner;
 import ch.systemsx.cisd.etlserver.FileRenamer;
 import ch.systemsx.cisd.etlserver.IDataStoreStrategy;
@@ -33,13 +32,11 @@ import ch.systemsx.cisd.etlserver.ITopLevelDataSetRegistratorDelegate;
 import ch.systemsx.cisd.etlserver.IdentifiedDataStrategy;
 import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState;
 import ch.systemsx.cisd.etlserver.TransferredDataSetHandler;
-import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.DoNothingDelegatedAction;
 import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransaction;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
-import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.types.DataSetTypeCode;
 
 /**
@@ -47,50 +44,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.types.DataSetTypeCode;
  * 
  * @author Chandrasekhar Ramakrishnan
  */
-/**
- * 
- *
- * @author Chandrasekhar Ramakrishnan
- */
-/**
- * 
- *
- * @author Chandrasekhar Ramakrishnan
- */
-/**
- * 
- *
- * @author Chandrasekhar Ramakrishnan
- */
-/**
- * @author Chandrasekhar Ramakrishnan
- */
-/**
- * @author Chandrasekhar Ramakrishnan
- */
 public class DataSetRegistrationService<T extends DataSetInformation> implements
-        DataSetRegistrationAlgorithm.IRollbackDelegate, IDataSetRegistrationService
+        IDataSetRegistrationService
 {
-    /**
-     * A data set that will be created but might not yet exist.
-     * 
-     * @author Chandrasekhar Ramakrishnan
-     */
-    public static class FutureDataSet
-    {
-        private final String code;
-
-        public FutureDataSet(String code)
-        {
-            this.code = code;
-        }
-
-        public String getCode()
-        {
-            return code;
-        }
-    }
-
     static final String STAGING_DIR = "staging-dir";
 
     private final AbstractOmniscientTopLevelDataSetRegistrator<T> registrator;
@@ -158,21 +114,6 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
         return registratorContext;
     }
 
-    /**
-     * Queue registration a data set and return a future for the data set that will be created.
-     */
-    public FutureDataSet queueDataSetRegistration(File dataSetFile,
-            final DataSetRegistrationDetails<T> details)
-    {
-        DataSetRegistrationAlgorithm registration =
-                createRegistrationAlgorithm(dataSetFile, details);
-        dataSetRegistrations.add(registration);
-
-        FutureDataSet future =
-                new FutureDataSet(registration.getDataSetInformation().getDataSetCode());
-        return future;
-    }
-
     /**
      * Create a new transaction that atomically performs file operations and registers entities.
      */
@@ -365,62 +306,6 @@ public class DataSetRegistrationService<T extends DataSetInformation> implements
         }
     }
 
-    private DataSetRegistrationAlgorithm createRegistrationAlgorithm(File aDataSetFile,
-            DataSetRegistrationDetails<T> details)
-    {
-        final TopLevelDataSetRegistratorGlobalState globalState =
-                registratorContext.getGlobalState();
-        details.getDataSetInformation().setShareId(globalState.getShareId());
-        final IDelegatedActionWithResult<Boolean> cleanAfterwardsAction =
-                new DoNothingDelegatedAction();
-
-        IDataStoreStrategy dataStoreStrategy =
-                registratorContext.getDataStrategyStore().getDataStoreStrategy(
-                        details.getDataSetInformation(), aDataSetFile);
-
-        DataSetRegistrationAlgorithmState state =
-                new DataSetRegistrationAlgorithmState(aDataSetFile,
-                        globalState.getOpenBisService(), cleanAfterwardsAction,
-                        registratorContext.getPreRegistrationAction(),
-                        registratorContext.getPostRegistrationAction(),
-                        details.getDataSetInformation(), dataStoreStrategy, details,
-                        registratorContext.getStorageProcessor(),
-                        registratorContext.getFileOperations(), globalState.getDataSetValidator(),
-                        globalState.getMailClient(), globalState.isDeleteUnidentified(),
-                        registratorContext.getRegistrationLock(), globalState.getDssCode(),
-                        globalState.isNotifySuccessfulRegistration());
-        return new DataSetRegistrationAlgorithm(state, this,
-                new DefaultApplicationServerRegistrator(registrator,
-                        details.getDataSetInformation()));
-    }
-
-    private static class DefaultApplicationServerRegistrator implements
-            DataSetRegistrationAlgorithm.IDataSetInApplicationServerRegistrator
-    {
-        private final AbstractOmniscientTopLevelDataSetRegistrator<?> registrator;
-
-        private final DataSetInformation dataSetInformation;
-
-        DefaultApplicationServerRegistrator(
-                AbstractOmniscientTopLevelDataSetRegistrator<?> registrator,
-                DataSetInformation dataSetInformation)
-        {
-            this.dataSetInformation = dataSetInformation;
-            this.registrator = registrator;
-        }
-
-        public void registerDataSetInApplicationServer(NewExternalData data) throws Throwable
-        {
-            registrator.registerDataSetInApplicationServer(dataSetInformation, data);
-        }
-    }
-
-    public void rollback(DataSetRegistrationAlgorithm algorithm, Throwable ex)
-    {
-        encounteredErrors.add(ex);
-        registrator.rollback(this, algorithm, ex);
-    }
-
     protected AbstractOmniscientTopLevelDataSetRegistrator<T> getRegistrator()
     {
         return registrator;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
index b4cc428fa57c82997f8449daf57f7fdf901afc51..9f1422fb2d21258ec6bd2c40e9ff9a05cbb31730 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
@@ -40,12 +40,6 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 public class JythonTopLevelDataSetHandler<T extends DataSetInformation> extends
         AbstractOmniscientTopLevelDataSetRegistrator<T>
 {
-    /**
-     * The name of the function to define to hook into the data set registration rollback mechanism.
-     */
-    private static final String ROLLBACK_DATA_SET_REGISTRATION_FUNCTION_NAME =
-            "rollback_data_set_registration";
-
     /**
      * The name of the function to define to hook into the service rollback mechanism.
      */
@@ -165,22 +159,6 @@ public class JythonTopLevelDataSetHandler<T extends DataSetInformation> extends
         return service;
     }
 
-    @Override
-    public void rollback(DataSetRegistrationService<T> service,
-            DataSetRegistrationAlgorithm registrationAlgorithm, Throwable throwable)
-    {
-        PythonInterpreter interpreter = getInterpreterFromService(service);
-        PyFunction function =
-                tryJythonFunction(interpreter, ROLLBACK_DATA_SET_REGISTRATION_FUNCTION_NAME);
-        if (null != function)
-        {
-            invokeRollbackDataSetRegistrationFunction(function, service, registrationAlgorithm,
-                    throwable);
-        }
-
-        super.rollback(service, registrationAlgorithm, throwable);
-    }
-
     @Override
     protected void rollback(DataSetRegistrationService<T> service, Throwable throwable)
     {
@@ -212,6 +190,15 @@ public class JythonTopLevelDataSetHandler<T extends DataSetInformation> extends
         if (null != function)
         {
             invokeRollbackTransactionFunction(function, service, transaction, algorithmRunner, ex);
+        } else
+        {
+            // No Rollback transaction function was called, see if the rollback service function was
+            // defined, and call it.
+            function = tryJythonFunction(interpreter, ROLLBACK_SERVICE_FUNCTION_NAME);
+            if (null != function)
+            {
+                invokeRollbackServiceFunction(function, service, ex);
+            }
         }
     }
 
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 44a020b530a5aa13d936144b6da1e4d8a8fc269f..758cc12161e0dd1b8015257613ffbd2fd1205e5d 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
@@ -986,14 +986,6 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractFileSystemTest
             }
         }
 
-        @Override
-        public void rollback(DataSetRegistrationService<DataSetInformation> service,
-                DataSetRegistrationAlgorithm registrationAlgorithm, Throwable throwable)
-        {
-            super.rollback(service, registrationAlgorithm, throwable);
-            didDataSetRollbackHappen = true;
-        }
-
         @Override
         public void rollback(DataSetRegistrationService<DataSetInformation> service,
                 Throwable throwable)