diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTaskTest.java
index 6a2a2e99ba30595ede90f0d5ed3f77290bd9e892..613f614a42036f84beaafc3db87d70cae5cd210c 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTaskTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTaskTest.java
@@ -57,23 +57,24 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
-@Friend(toClasses={PostRegistrationMaintenanceTask.class, TaskExecutor.class})
+@Friend(toClasses =
+    { PostRegistrationMaintenanceTask.class, TaskExecutor.class })
 public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestCase
 {
     private static final String TASK_1_NAME = "task 1";
+
     private static final String TASK_2_NAME = "task 2";
 
     private static final String TASK_NAME_PROPERTY = "task-name";
-    
+
     private static final class MockCleanupTask implements ICleanupTask
     {
         private static final long serialVersionUID = 1L;
+
         private final String name;
-        
+
         public MockCleanupTask(String name)
         {
             this.name = name;
@@ -83,13 +84,13 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         {
             cleanupInvocations.add(name);
         }
-        
+
     }
-    
+
     public static final class MockPostRegistrationTask extends AbstractPostRegistrationTask
     {
         private final IPostRegistrationTask task;
-        
+
         public MockPostRegistrationTask(Properties properties, IEncapsulatedOpenBISService service)
         {
             super(properties, service);
@@ -97,7 +98,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
             task = mockTasks.get(taskName);
             assertNotNull("No task found for '" + taskName + "'.", task);
         }
-        
+
         public boolean requiresDataStoreLock()
         {
             return task.requiresDataStoreLock();
@@ -109,21 +110,30 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         }
 
     }
-    
-    private static Map<String, IPostRegistrationTask> mockTasks = new HashMap<String, IPostRegistrationTask>();
+
+    private static Map<String, IPostRegistrationTask> mockTasks =
+            new HashMap<String, IPostRegistrationTask>();
+
     private static List<String> cleanupInvocations = new ArrayList<String>();
-    
+
     private BufferedAppender logRecorder;
+
     private Mockery context;
 
     private IEncapsulatedOpenBISService service;
-    
+
     private ICleanupTask cleanupTask;
+
     private IPostRegistrationTask task1;
+
     private IPostRegistrationTaskExecutor executor1;
+
     private IPostRegistrationTask task2;
+
     private IPostRegistrationTaskExecutor executor2;
+
     private File cleanupTasksFolder;
+
     private File lastSeenDataSetFile;
 
     @BeforeMethod
@@ -141,7 +151,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         task2 = context.mock(IPostRegistrationTask.class, TASK_2_NAME);
         executor2 = context.mock(IPostRegistrationTaskExecutor.class, "executor 2");
         mockTasks.put(TASK_2_NAME, task2);
-        
+
         final BeanFactory beanFactory = context.mock(BeanFactory.class);
         context.checking(new Expectations()
             {
@@ -154,7 +164,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         cleanupTasksFolder = new File(workingDirectory, "cleanup-tasks");
         lastSeenDataSetFile = new File(workingDirectory, "last-seen-data-set.txt");
     }
-    
+
     @AfterMethod(alwaysRun = true)
     public void afterMethod()
     {
@@ -188,33 +198,95 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         assertNoUexpectedInvocations();
         context.assertIsSatisfied();
     }
-    
+
     @Test
     public void testLastSeenDataSetFile()
     {
         Properties properties = createDefaultProperties();
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-            new RecordingMatcher<TrackingDataSetCriteria>();
+
+        final Sequence sequence = context.sequence("tasks");
+
         context.checking(new Expectations()
-        {
             {
-                one(task1).requiresDataStoreLock();
-                will(returnValue(true));
-                one(task2).requiresDataStoreLock();
-                will(returnValue(false));
-                
-                one(service).listNewerDataSets(with(criteriaMatcher));
-                will(returnValue(Arrays.asList()));
-            }
-        });
-        FileUtilities.writeToFile(lastSeenDataSetFile, "42");
-        
+                {
+                    one(task1).requiresDataStoreLock();
+                    will(returnValue(true));
+                    one(task2).requiresDataStoreLock();
+                    will(returnValue(false));
+
+                    DataSetBuilder ds1 =
+                            new DataSetBuilder(42).code("ds-1").registrationDate(new Date(4711));
+
+                    one(service).listDataSetsForPostRegistration();
+                    will(returnValue(Arrays.asList(ds1.getDataSet())));
+
+                    one(task1).createExecutor("ds-1", false);
+                    will(returnValue(executor1));
+                    inSequence(sequence);
+                    one(executor1).createCleanupTask();
+                    will(returnValue(cleanupTask));
+                    inSequence(sequence);
+                    one(executor1).execute();
+                    inSequence(sequence);
+                    one(task2).createExecutor("ds-1", false);
+                    will(returnValue(executor2));
+                    inSequence(sequence);
+                    one(executor2).createCleanupTask();
+                    will(returnValue(cleanupTask));
+                    inSequence(sequence);
+                    one(executor2).execute();
+                    inSequence(sequence);
+
+                    one(service).markSuccessfulPostRegistration("ds-1");
+                    will(throwException(new Exception("Can't mark as registered")));
+                }
+            });
+
+        PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
+        maintenanceTask.setUp("post-registration", properties);
+        maintenanceTask.execute();
+
+        assertEquals("ds-1", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+        assertEquals(0, cleanupInvocations.size());
+        assertEquals(true, maintenanceTask.requiresDataStoreLock());
+        assertEmptyCleanupTaskFolder();
+        assertNoUexpectedInvocations();
+        context.assertIsSatisfied();
+    }
+
+    @Test
+    public void testLastSeenDataSetFileExistsPriorToTheTask()
+    {
+        Properties properties = createDefaultProperties();
+
+        final Sequence sequence = context.sequence("tasks");
+
+        // when there is lastSeenDataSetFile it means, that the marking of the dataset has not
+        // succeeded.
+        // Before proceeding, the dataset which code is in this file will have to marked as
+        // postregistered and file will have to be deleted.
+        FileUtilities.appendToFile(lastSeenDataSetFile, "already there", false);
+
+        context.checking(new Expectations()
+            {
+                {
+                    one(task1).requiresDataStoreLock();
+                    will(returnValue(true));
+                    one(task2).requiresDataStoreLock();
+                    will(returnValue(false));
+
+                    one(service).listDataSetsForPostRegistration();
+                    will(returnValue(Arrays.asList()));
+
+                    one(service).markSuccessfulPostRegistration("already there");
+                }
+            });
+
         PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
         maintenanceTask.setUp("post-registration", properties);
         maintenanceTask.execute();
-        
-        assertEquals(42, criteriaMatcher.recordedObject().getLastSeenDataSetId());
-        assertEquals("42", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+
+        assertFalse(lastSeenDataSetFile.exists());
         assertEquals(0, cleanupInvocations.size());
         assertEquals(true, maintenanceTask.requiresDataStoreLock());
         assertEmptyCleanupTaskFolder();
@@ -226,8 +298,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
     public void testCleanup() throws IOException
     {
         Properties properties = createDefaultProperties();
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-                new RecordingMatcher<TrackingDataSetCriteria>();
+
         context.checking(new Expectations()
             {
                 {
@@ -236,7 +307,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     one(task2).requiresDataStoreLock();
                     will(returnValue(true));
 
-                    one(service).listNewerDataSets(with(criteriaMatcher));
+                    one(service).listDataSetsForPostRegistration();
                     will(returnValue(Arrays.asList()));
                 }
             });
@@ -246,14 +317,13 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         FileUtilities.writeToFile(file, "hello world");
         File cleanupFile2 = new File(cleanupTasksFolder, "blabla.ser");
         FileUtilities.writeToFile(cleanupFile2, "hello world");
-        
+
         PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
         maintenanceTask.setUp("post-registration", properties);
         maintenanceTask.execute();
-        
+
         AssertionUtil.assertContains("ERROR OPERATION.PostRegistrationMaintenanceTask - "
                 + "Couldn't performed clean up task " + cleanupFile2, logRecorder.getLogContent());
-        assertEquals(0, criteriaMatcher.recordedObject().getLastSeenDataSetId());
         assertEquals(true, maintenanceTask.requiresDataStoreLock());
         assertEquals(1, cleanupInvocations.size());
         assertEquals(false, cleanupFile1.exists());
@@ -262,14 +332,15 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
         assertNoUexpectedInvocations();
         context.assertIsSatisfied();
     }
-    
+
     @Test
     public void testExecute()
     {
         Properties properties = createDefaultProperties();
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-                new RecordingMatcher<TrackingDataSetCriteria>();
         final Sequence sequence = context.sequence("tasks");
+
+        FileUtilities.appendToFile(lastSeenDataSetFile, "already there", false);
+
         context.checking(new Expectations()
             {
                 {
@@ -278,9 +349,13 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     one(task2).requiresDataStoreLock();
                     will(returnValue(false));
 
-                    one(service).listNewerDataSets(with(criteriaMatcher));
-                    DataSetBuilder ds1 = new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
-                    DataSetBuilder ds2 = new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
+                    one(service).markSuccessfulPostRegistration("already there");
+
+                    one(service).listDataSetsForPostRegistration();
+                    DataSetBuilder ds1 =
+                            new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
+                    DataSetBuilder ds2 =
+                            new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
                     will(returnValue(Arrays.asList(ds2.getDataSet(), ds1.getDataSet())));
 
                     one(task1).createExecutor("ds-1", false);
@@ -316,6 +391,10 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     inSequence(sequence);
                     one(executor2).execute();
                     inSequence(sequence);
+
+                    one(service).markSuccessfulPostRegistration("ds-1");
+
+                    one(service).markSuccessfulPostRegistration("ds-2");
                 }
             });
 
@@ -328,8 +407,7 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                 + "Post registration of 1. of 2 data sets: ds-1\n"
                 + "INFO  OPERATION.PostRegistrationMaintenanceTask - "
                 + "Post registration of 2. of 2 data sets: ds-2", logRecorder.getLogContent());
-        assertEquals(0, criteriaMatcher.recordedObject().getLastSeenDataSetId());
-        assertEquals("2", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+        assertFalse(lastSeenDataSetFile.exists());
         assertEquals(0, cleanupInvocations.size());
         assertEmptyCleanupTaskFolder();
         assertNoUexpectedInvocations();
@@ -341,69 +419,67 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
     {
         Properties properties = createDefaultProperties();
         properties.setProperty(PostRegistrationMaintenanceTask.IGNORE_DATA_SETS, "2011-03-01");
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-            new RecordingMatcher<TrackingDataSetCriteria>();
         final Sequence sequence = context.sequence("tasks");
         context.checking(new Expectations()
-        {
             {
-                one(task1).requiresDataStoreLock();
-                will(returnValue(false));
-                one(task2).requiresDataStoreLock();
-                will(returnValue(false));
-                
-                one(service).listNewerDataSets(with(criteriaMatcher));
-                DataSetBuilder ds1 = new DataSetBuilder(1).code("ds-1");
-                try
-                {
-                    ds1.registrationDate(new SimpleDateFormat("yyyy-MM-dd").parse("2011-03-02"));
-                } catch (ParseException ex)
                 {
-                    throw CheckedExceptionTunnel.wrapIfNecessary(ex);
+                    one(task1).requiresDataStoreLock();
+                    will(returnValue(false));
+                    one(task2).requiresDataStoreLock();
+                    will(returnValue(false));
+
+                    one(service).listDataSetsForPostRegistration();
+                    DataSetBuilder ds1 = new DataSetBuilder(1).code("ds-1");
+                    try
+                    {
+                        ds1.registrationDate(new SimpleDateFormat("yyyy-MM-dd").parse("2011-03-02"));
+                    } catch (ParseException ex)
+                    {
+                        throw CheckedExceptionTunnel.wrapIfNecessary(ex);
+                    }
+                    DataSetBuilder ds2 =
+                            new DataSetBuilder(2).code("ds-2").registrationDate(new Date(42));
+                    will(returnValue(Arrays.asList(ds2.getDataSet(), ds1.getDataSet())));
+
+                    one(task1).createExecutor("ds-1", false);
+                    will(returnValue(executor1));
+                    inSequence(sequence);
+                    one(executor1).createCleanupTask();
+                    will(returnValue(cleanupTask));
+                    inSequence(sequence);
+                    one(executor1).execute();
+                    inSequence(sequence);
+                    one(task2).createExecutor("ds-1", false);
+                    will(returnValue(executor2));
+                    inSequence(sequence);
+                    one(executor2).createCleanupTask();
+                    will(returnValue(cleanupTask));
+                    inSequence(sequence);
+                    one(executor2).execute();
+                    inSequence(sequence);
+
+                    one(service).markSuccessfulPostRegistration("ds-1");
                 }
-                DataSetBuilder ds2 = new DataSetBuilder(2).code("ds-2").registrationDate(new Date(42));
-                will(returnValue(Arrays.asList(ds2.getDataSet(), ds1.getDataSet())));
-                
-                one(task1).createExecutor("ds-1", false);
-                will(returnValue(executor1));
-                inSequence(sequence);
-                one(executor1).createCleanupTask();
-                will(returnValue(cleanupTask));
-                inSequence(sequence);
-                one(executor1).execute();
-                inSequence(sequence);
-                one(task2).createExecutor("ds-1", false);
-                will(returnValue(executor2));
-                inSequence(sequence);
-                one(executor2).createCleanupTask();
-                will(returnValue(cleanupTask));
-                inSequence(sequence);
-                one(executor2).execute();
-                inSequence(sequence);
-            }
-        });
-        
+            });
+
         PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
         maintenanceTask.setUp("post-registration", properties);
         assertEquals(false, maintenanceTask.requiresDataStoreLock());
         maintenanceTask.execute();
-        
+
         assertEquals("INFO  OPERATION.PostRegistrationMaintenanceTask -"
                 + " Post registration of 1. of 1 data sets: ds-1", logRecorder.getLogContent());
-        assertEquals(0, criteriaMatcher.recordedObject().getLastSeenDataSetId());
-        assertEquals("1", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+        assertFalse(lastSeenDataSetFile.exists());
         assertEquals(0, cleanupInvocations.size());
         assertEmptyCleanupTaskFolder();
         assertNoUexpectedInvocations();
         context.assertIsSatisfied();
     }
-    
+
     @Test
     public void testExecuteWithExceptionThrownInExecute()
     {
         Properties properties = createDefaultProperties();
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-                new RecordingMatcher<TrackingDataSetCriteria>();
         final Sequence sequence = context.sequence("tasks");
         context.checking(new Expectations()
             {
@@ -413,11 +489,15 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     one(task2).requiresDataStoreLock();
                     will(returnValue(false));
 
-                    one(service).listNewerDataSets(with(criteriaMatcher));
-                    DataSetBuilder ds1 = new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
-                    DataSetBuilder ds2 = new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
-                    DataSetBuilder ds3 = new DataSetBuilder(3).code("ds-3").registrationDate(new Date(4711));
-                    will(returnValue(Arrays.asList(ds2.getDataSet(), ds3.getDataSet(), ds1.getDataSet())));
+                    one(service).listDataSetsForPostRegistration();
+                    DataSetBuilder ds1 =
+                            new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
+                    DataSetBuilder ds2 =
+                            new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
+                    DataSetBuilder ds3 =
+                            new DataSetBuilder(3).code("ds-3").registrationDate(new Date(4711));
+                    will(returnValue(Arrays.asList(ds2.getDataSet(), ds3.getDataSet(),
+                            ds1.getDataSet())));
 
                     one(task1).createExecutor("ds-1", false);
                     will(returnValue(executor1));
@@ -436,6 +516,8 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     one(executor2).execute();
                     inSequence(sequence);
 
+                    one(service).markSuccessfulPostRegistration("ds-1");
+
                     one(task1).createExecutor("ds-2", false);
                     will(returnValue(executor1));
                     inSequence(sequence);
@@ -455,101 +537,102 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
                     will(throwException(new Throwable("error")));
                 }
             });
-        
+
         PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
         maintenanceTask.setUp("post-registration", properties);
         assertEquals(false, maintenanceTask.requiresDataStoreLock());
         maintenanceTask.execute();
-        
+
         AssertionUtil.assertContains("ERROR OPERATION.PostRegistrationMaintenanceTask - "
-                + "Task '2' for data set ds-2 failed.",
-                logRecorder.getLogContent());
+                + "Task '2' for data set ds-2 failed.", logRecorder.getLogContent());
         AssertionUtil.assertContains("ERROR OPERATION.PostRegistrationMaintenanceTask - "
                 + "Because post registration task failed for data set ds-2 "
                 + "post registration tasks are postponed for the following data sets: [ds-3]",
                 logRecorder.getLogContent());
-        assertEquals(0, criteriaMatcher.recordedObject().getLastSeenDataSetId());
-        assertEquals("1", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+        assertFalse(lastSeenDataSetFile.exists());
         assertEquals("[D]", cleanupInvocations.toString());
         assertEmptyCleanupTaskFolder();
         assertNoUexpectedInvocations();
         context.assertIsSatisfied();
     }
-    
+
     @Test
     public void testExecuteWithExceptionThrownInCreateCleanUp()
     {
         Properties properties = createDefaultProperties();
-        final RecordingMatcher<TrackingDataSetCriteria> criteriaMatcher =
-                new RecordingMatcher<TrackingDataSetCriteria>();
         final Sequence sequence = context.sequence("tasks");
         context.checking(new Expectations()
-        {
             {
-                one(task1).requiresDataStoreLock();
-                will(returnValue(false));
-                one(task2).requiresDataStoreLock();
-                will(returnValue(false));
-                
-                one(service).listNewerDataSets(with(criteriaMatcher));
-                DataSetBuilder ds1 = new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
-                DataSetBuilder ds2 = new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
-                DataSetBuilder ds3 = new DataSetBuilder(3).code("ds-3").registrationDate(new Date(4711));
-                will(returnValue(Arrays.asList(ds2.getDataSet(), ds3.getDataSet(), ds1.getDataSet())));
-                
-                one(task1).createExecutor("ds-1", false);
-                will(returnValue(executor1));
-                inSequence(sequence);
-                one(executor1).createCleanupTask();
-                will(returnValue(new MockCleanupTask("A")));
-                inSequence(sequence);
-                one(executor1).execute();
-                inSequence(sequence);
-                one(task2).createExecutor("ds-1", false);
-                will(returnValue(executor2));
-                inSequence(sequence);
-                one(executor2).createCleanupTask();
-                will(returnValue(new MockCleanupTask("B")));
-                inSequence(sequence);
-                one(executor2).execute();
-                inSequence(sequence);
-                
-                one(task1).createExecutor("ds-2", false);
-                will(returnValue(executor1));
-                inSequence(sequence);
-                one(executor1).createCleanupTask();
-                will(returnValue(new MockCleanupTask("C")));
-                inSequence(sequence);
-                one(executor1).execute();
-                inSequence(sequence);
-                one(task2).createExecutor("ds-2", false);
-                will(returnValue(executor2));
-                inSequence(sequence);
-                one(executor2).createCleanupTask();
-                will(returnValue(new Throwable("error")));
-            }
-        });
-        
+                {
+                    one(task1).requiresDataStoreLock();
+                    will(returnValue(false));
+                    one(task2).requiresDataStoreLock();
+                    will(returnValue(false));
+
+                    one(service).listDataSetsForPostRegistration();
+                    DataSetBuilder ds1 =
+                            new DataSetBuilder(1).code("ds-1").registrationDate(new Date(4711));
+                    DataSetBuilder ds2 =
+                            new DataSetBuilder(2).code("ds-2").registrationDate(new Date(4711));
+                    DataSetBuilder ds3 =
+                            new DataSetBuilder(3).code("ds-3").registrationDate(new Date(4711));
+                    will(returnValue(Arrays.asList(ds2.getDataSet(), ds3.getDataSet(),
+                            ds1.getDataSet())));
+
+                    one(task1).createExecutor("ds-1", false);
+                    will(returnValue(executor1));
+                    inSequence(sequence);
+                    one(executor1).createCleanupTask();
+                    will(returnValue(new MockCleanupTask("A")));
+                    inSequence(sequence);
+                    one(executor1).execute();
+                    inSequence(sequence);
+                    one(task2).createExecutor("ds-1", false);
+                    will(returnValue(executor2));
+                    inSequence(sequence);
+                    one(executor2).createCleanupTask();
+                    will(returnValue(new MockCleanupTask("B")));
+                    inSequence(sequence);
+                    one(executor2).execute();
+                    inSequence(sequence);
+
+                    one(task1).createExecutor("ds-2", false);
+                    will(returnValue(executor1));
+                    inSequence(sequence);
+                    one(executor1).createCleanupTask();
+                    will(returnValue(new MockCleanupTask("C")));
+                    inSequence(sequence);
+                    one(executor1).execute();
+                    inSequence(sequence);
+                    one(task2).createExecutor("ds-2", false);
+                    will(returnValue(executor2));
+                    inSequence(sequence);
+                    one(executor2).createCleanupTask();
+                    will(returnValue(new Throwable("error")));
+
+                    one(service).markSuccessfulPostRegistration("ds-1");
+
+                }
+            });
+
         PostRegistrationMaintenanceTask maintenanceTask = new PostRegistrationMaintenanceTask();
         maintenanceTask.setUp("post-registration", properties);
         assertEquals(false, maintenanceTask.requiresDataStoreLock());
         maintenanceTask.execute();
-        
+
         AssertionUtil.assertContains("ERROR OPERATION.PostRegistrationMaintenanceTask - "
-                + "Task '2' for data set ds-2 failed.",
-                logRecorder.getLogContent());
+                + "Task '2' for data set ds-2 failed.", logRecorder.getLogContent());
         AssertionUtil.assertContains("ERROR OPERATION.PostRegistrationMaintenanceTask - "
                 + "Because post registration task failed for data set ds-2 "
                 + "post registration tasks are postponed for the following data sets: [ds-3]",
                 logRecorder.getLogContent());
-        assertEquals(0, criteriaMatcher.recordedObject().getLastSeenDataSetId());
-        assertEquals("1", FileUtilities.loadExactToString(lastSeenDataSetFile).trim());
+        assertFalse(lastSeenDataSetFile.exists());
         assertEquals("[]", cleanupInvocations.toString());
         assertEmptyCleanupTaskFolder();
         assertNoUexpectedInvocations();
         context.assertIsSatisfied();
     }
-    
+
     private void assertNoUexpectedInvocations()
     {
         String logContent = logRecorder.getLogContent();
@@ -559,12 +642,12 @@ public class PostRegistrationMaintenanceTaskTest extends AbstractFileSystemTestC
             fail(logContent.substring(index));
         }
     }
-    
+
     private void assertEmptyCleanupTaskFolder()
     {
         assertEquals("[]", Arrays.asList(cleanupTasksFolder.list()).toString());
     }
-    
+
     private Properties createDefaultProperties()
     {
         Properties properties = new Properties();
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 e3de0c663fedf548fe155261e1a3565b5459e2dc..acc9ee4198c743f9e72378f799b0e3b1b99c459a 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
@@ -512,6 +512,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa
                         will(returnValue(new AtomicEntityOperationResult()));
                         
                         one(openBisService).setStorageConfirmed(with(any(String.class)));
+                        one(openBisService).markDataSetForRegistration(with(any(String.class)));
                     }
                 }
             });