diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
index 7cb63dba030f2aaffea48922ee9cb9cb60286372..064b62ddb19d93c785ebe05e3bc9246cb6ea0706 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
@@ -226,8 +226,10 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
         // Don't rollback when this exception happens
         boolean stopped = ex instanceof InterruptedExceptionUnchecked;
 
-        for (DataSetStorageAlgorithm<T> storageAlgorithm : dataSetStorageAlgorithms)
+        // Rollback in the reverse order
+        for (int i = dataSetStorageAlgorithms.size() - 1; i >= 0; --i)
         {
+            DataSetStorageAlgorithm<T> storageAlgorithm = dataSetStorageAlgorithms.get(i);
             storageAlgorithm.rollbackStorageProcessor(ex);
 
             if (stopped == false)