diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
index c8e19d40075d6781315893c9c894673f1416ae3b..00706dc3d50814466261ec3bf6418c8f701fbbdb 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/AbstractArchiverProcessingPlugin.java
@@ -361,7 +361,8 @@ public abstract class AbstractArchiverProcessingPlugin extends AbstractDatastore
     protected static enum Operation
     {
         ARCHIVE("Archiving"), UNARCHIVE("Unarchiving"),
-        DELETE_FROM_ARCHIVE("Deleting from archive");
+        DELETE_FROM_ARCHIVE("Deleting from archive"),
+        MARK_AS_DELETED("Marking as deleted");
 
         private final String description;
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
index e7e1af50b51980003596a6b8e3dea707523f4932..61102091f3faf0c1ac441112871deb30bd6d0033 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DataSetFileOperationsManager.java
@@ -80,6 +80,8 @@ public class DataSetFileOperationsManager implements IDataSetFileOperationsManag
     @Private
     static final long DEFAULT_TIMEOUT_SECONDS = 15;
 
+    private static final String FOLDER_OF_AS_DELETED_MARKED_DATA_SETS = "DELETED";
+
     private final IDataSetFileOperationsExecutor executor;
 
     private final File destination;
@@ -211,6 +213,21 @@ public class DataSetFileOperationsManager implements IDataSetFileOperationsManag
         }
     }
 
+    public Status markAsDeleted(DatasetLocation dataset)
+    {
+        try
+        {
+            File deletedFolder = new File(destination, FOLDER_OF_AS_DELETED_MARKED_DATA_SETS);
+            executor.createFolder(deletedFolder);
+            File markerFile = new File(deletedFolder, dataset.getCode());
+            executor.createMarkerFile(markerFile);
+            return Status.OK;
+        } catch (ExceptionWithStatus ex)
+        {
+            return ex.getStatus();
+        }
+    }
+
     /**
      * Checks if specified dataset's data are present and synchronized in the destination specified
      * in constructor. The path at the destination is defined by original location of the data set.
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IDataSetFileOperationsManager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IDataSetFileOperationsManager.java
index 7749d1be1c2c759aa1e4248a7e490f21f84377b3..3da3bdfe13575f57eb5b5e7b75cd2b7e6a0604a7 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IDataSetFileOperationsManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IDataSetFileOperationsManager.java
@@ -36,16 +36,21 @@ public interface IDataSetFileOperationsManager
     public abstract Status copyToDestination(File originalData, DatasetDescription dataset);
 
     /**
-     * Retrieves specified datases's data from the destination specified in constructor. The path at
+     * Retrieves specified dataset's data from the destination specified in constructor. The path at
      * the destination is defined by original location of the data set.
      */
     public abstract Status retrieveFromDestination(File originalData, DatasetDescription dataset);
 
     /**
-     * Deletes specified datases's data from the destination specified in constructor. The path at
+     * Deletes specified dataset's data from the destination specified in constructor. The path at
      * the destination is defined by original location of the data set.
      */
     public abstract Status deleteFromDestination(DatasetLocation dataset);
+    
+    /**
+     * Marks the specified data set as deleted. Does not delete the dataset's data.
+     */
+    public abstract Status markAsDeleted(DatasetLocation dataset);
 
     /**
      * Checks if specified dataset's data are present and synchronized in the destination specified
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
index 61829d55a678e5c948055108e6f313cdf5d17777..a2c13785bf085742c9052687c06acc2406c9eb40 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/RsyncArchiver.java
@@ -24,6 +24,7 @@ import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.filesystem.BooleanStatus;
+import ch.systemsx.cisd.common.utilities.PropertyUtils;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ArchiverTaskContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
@@ -42,10 +43,48 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
  */
 public class RsyncArchiver extends AbstractArchiverProcessingPlugin
 {
+    private static final String ONLY_MARK_AS_DELETED_KEY = "only-mark-as-deleted";
+
     private static final long serialVersionUID = 1L;
 
+    private enum DeleteAction
+    {
+        DELETE(Operation.DELETE_FROM_ARCHIVE)
+        {
+            @Override
+            public Status execute(IDataSetFileOperationsManager manager, DatasetLocation dataSet)
+            {
+                return manager.deleteFromDestination(dataSet);
+            }
+        },
+        MARK_AS_DELETED(Operation.MARK_AS_DELETED)
+        {
+            @Override
+            public Status execute(IDataSetFileOperationsManager manager, DatasetLocation dataSet)
+            {
+                return manager.markAsDeleted(dataSet);
+            }
+        };
+        private final Operation operation;
+
+        private DeleteAction(Operation operation)
+        {
+            this.operation = operation;
+        }
+
+        public Operation getOperation()
+        {
+            return operation;
+        }
+
+        public abstract Status execute(IDataSetFileOperationsManager manager,
+                DatasetLocation dataSet);
+    }
+
     private transient IDataSetFileOperationsManager fileOperationsManager;
 
+    private final DeleteAction deleteAction;
+
     public RsyncArchiver(Properties properties, File storeRoot)
     {
         this(properties, storeRoot, new DataSetFileOperationsManager(properties,
@@ -58,6 +97,13 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
     {
         super(properties, storeRoot, null, null);
         this.fileOperationsManager = fileOperationsManager;
+        if (PropertyUtils.getBoolean(properties, ONLY_MARK_AS_DELETED_KEY, true))
+        {
+            deleteAction = DeleteAction.MARK_AS_DELETED;
+        } else
+        {
+            deleteAction = DeleteAction.DELETE;
+        }
     }
 
     @Override
@@ -97,13 +143,12 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
         DatasetProcessingStatuses statuses = new DatasetProcessingStatuses();
         for (DatasetLocation dataset : datasets)
         {
-            Status status = doDeleteFromArchive(dataset);
-            statuses.addResult(dataset.getDataSetCode(), status, Operation.DELETE_FROM_ARCHIVE);
+            Status status = deleteAction.execute(fileOperationsManager, dataset);
+            statuses.addResult(dataset.getDataSetCode(), status, deleteAction.getOperation());
         }
-
         return statuses;
     }
-
+    
     @Override
     protected BooleanStatus isDataSetSynchronizedWithArchive(DatasetDescription dataset,
             ArchiverTaskContext context)
@@ -128,11 +173,6 @@ public class RsyncArchiver extends AbstractArchiverProcessingPlugin
         return fileOperationsManager.retrieveFromDestination(originalData, dataset);
     }
 
-    private Status doDeleteFromArchive(DatasetLocation dataset)
-    {
-        return fileOperationsManager.deleteFromDestination(dataset);
-    }
-
     private File getDatasetDirectory(ArchiverTaskContext context, DatasetDescription dataset)
     {
         return context.getDirectoryProvider().getDataSetDirectory(dataset);