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 eaf928673af872225d1957cd9559702e8bb9e548..8be39f89f93aa778dbb205afc992cce9a5634f79 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
@@ -312,7 +312,12 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
 
         postRegistration();
 
-        return storeAfterRegistration(RecoveryStage.PRECOMMIT);
+        if (false == commitAndStore())
+        {
+            return false;
+        }
+
+        return storeAfterRegistration();
 
         // confirm storage in AS
 
@@ -335,35 +340,33 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
                 + registrationId.toString() + ")");
     }
 
-    // FIXME: only temporary - extract this knowledge a leve higher
-    /**
-     * Execute the post-registration part of the storage process
-     */
-    public boolean storeAfterRegistration(DataSetStorageRecoveryInfo.RecoveryStage stage)
+    public boolean commitAndStore()
     {
-
-        if (stage.before(RecoveryStage.STORAGE_COMPLETED))
+        if (commitStorageProcessors() == false)
         {
-            // checkpoint - post-registration-hook executed
-
-            if (commitStorageProcessors() == false)
-            {
-                return false;
-            }
+            return false;
+        }
 
-            // COMMITED
+        // COMMITED
 
-            if (storeCommitedDatasets() == false)
-            {
-                return false;
-            }
+        if (storeCommitedDatasets() == false)
+        {
+            return false;
+        }
 
-            if (shouldUseAutoRecovery())
-            {
-                storageRecoveryManager.checkpointStoredStateBeforeStorageConfirmation(this);
-            }
+        if (shouldUseAutoRecovery())
+        {
+            storageRecoveryManager.checkpointStoredStateBeforeStorageConfirmation(this);
         }
-        
+        return true;
+    }
+
+    /**
+     * Execute the post-registration part of the storage process
+     */
+    public boolean storeAfterRegistration()
+    {
+
         cleanPrecommitDirectory();
 
         boolean confirmStorageSucceeded = confirmStorageInApplicationServer();
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
index 339e56edbf53b4cc1f5e243335a6af2ec0a4c91d..ee8d83f54033413f1e334111bd50c22d399cc187 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
@@ -392,7 +392,16 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
                     runner.postRegistration();
                 }
 
-                boolean success = runner.storeAfterRegistration(recoveryStage);
+                boolean success = true;
+                if (recoveryStage.before(RecoveryStage.STORAGE_COMPLETED))
+                {
+                    success = runner.commitAndStore();
+                }
+
+                if (success)
+                {
+                    success = runner.storeAfterRegistration();
+                }
                 if (success)
                 {
                     logger.registerSuccess();