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 0b63752a88713d8b6d67ac1ec33a43d0a30dc8f8..2960646bbdb1ed16bd16b43b3df0e31962302286 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
@@ -207,7 +207,8 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
      * 
      * @author Chandrasekhar Ramakrishnan
      */
-    public static class PostRegistrationCleanUpAction extends AbstractDelegatedActionWithResult<Boolean>
+    public static class PostRegistrationCleanUpAction extends
+            AbstractDelegatedActionWithResult<Boolean>
     {
         private final File originalInboxFile;
 
@@ -215,7 +216,8 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
 
         private final IDelegatedActionWithResult<Boolean> wrappedAction;
 
-        public PostRegistrationCleanUpAction(File originalInboxFile, File hardlinkCopyFile, IDelegatedActionWithResult<Boolean> wrappedAction)
+        public PostRegistrationCleanUpAction(File originalInboxFile, File hardlinkCopyFile,
+                IDelegatedActionWithResult<Boolean> wrappedAction)
         {
             super(true);
             this.originalInboxFile = originalInboxFile;
@@ -336,13 +338,21 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
         {
             incomingDataSetFile =
                     state.getMarkerFileUtility().getIncomingDataSetPathFromMarker(isFinishedFile);
-            markerFileCleanupAction = new AbstractDelegatedActionWithResult<Boolean>(false)
+            markerFileCleanupAction = new IDelegatedActionWithResult<Boolean>()
                 {
                     @Override
-                    public Boolean execute()
+                    public Boolean execute(boolean didOperationSucceed)
                     {
-                        return state.getMarkerFileUtility().deleteAndLogIsFinishedMarkerFile(
-                                isFinishedFile);
+                        boolean markerDeleteSucceeded =
+                                state.getMarkerFileUtility().deleteAndLogIsFinishedMarkerFile(
+                                        isFinishedFile);
+
+                        if (didOperationSucceed)
+                        {
+                            return markerDeleteSucceeded
+                                    && FileUtilities.deleteRecursively(incomingDataSetFile);
+                        }
+                        return markerDeleteSucceeded;
                     }
                 };
         } else
@@ -356,7 +366,9 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
 
             // Make a hardlink copy of the file
             File copyOfIncoming = copyIncomingFileToPreStaging(incomingDataSetFile);
-            PostRegistrationCleanUpAction cleanupAction = new PostRegistrationCleanUpAction(incomingDataSetFile, copyOfIncoming, markerFileCleanupAction);
+            PostRegistrationCleanUpAction cleanupAction =
+                    new PostRegistrationCleanUpAction(incomingDataSetFile, copyOfIncoming,
+                            markerFileCleanupAction);
 
             handle(copyOfIncoming, null, new NoOpDelegate(), cleanupAction);
         } else
@@ -369,7 +381,9 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
     {
         TopLevelDataSetRegistratorGlobalState globalState = state.getGlobalState();
         File preStagingRootDir = globalState.getPreStagingDir();
-        String incomingDirName = new DssUniqueFilenameGenerator(globalState.getThreadParameters().getThreadName(), incomingDataSetFile.getName(), null).generateFilename();
+        String incomingDirName =
+                new DssUniqueFilenameGenerator(globalState.getThreadParameters().getThreadName(),
+                        incomingDataSetFile.getName(), null).generateFilename();
         File preStagingDir = new File(preStagingRootDir, incomingDirName);
         preStagingDir.mkdir();