diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
index af4dbf9381c4c09cdaf43064f912c2d10e9a7817..31a549ef986560ad78262a92c6d98cccd30cfed2 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java
@@ -52,7 +52,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
         public String file_name;
 
         public long size_in_bytes;
-        
+
         public Integer checksum_crc32;
 
         public boolean is_directory;
@@ -156,6 +156,23 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
             }).getRoot();
     }
 
+    @Override
+    public Map<String, Integer> getDataSetChecksums(String dataSetCode)
+    {
+        Map<String, Integer> files = new HashMap<String, Integer>();
+        IPathInfoDAO queries = getDao();
+        Long id = queries.tryToGetDataSetId(dataSetCode);
+        if (id == null) {
+            return files;
+        }
+        List<DataSetFileRecord> records = getDao().listDataSetFiles(id);
+        for (DataSetFileRecord record : records)
+        {
+            files.put(record.relative_path, record.checksum_crc32);
+        }
+        return files;
+    }
+
     @Override
     public ISingleDataSetPathInfoProvider tryGetSingleDataSetPathInfoProvider(String dataSetCode)
     {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
index 1e4ab237ebb056e1ff04fb998751246e93c91e26..8c43ab849923a86288ef5e4cb0eba4b59f4b5b93 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
@@ -22,8 +22,10 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.io.IOUtils;
@@ -153,7 +155,6 @@ public class DistributedPackagingDataSetFileOperationsManager implements IDataSe
         {
             dataSetPackager = createPackager(file, dataSetExistenceChecker);
             dataSetPackager.addDataSetTo("", dataSet);
-            operationLog.info("Data set '" + dataSetCode + "' archived: " + file);
         } catch (Exception ex)
         {
             status = Status.createError(ex.toString());
@@ -165,9 +166,19 @@ public class DistributedPackagingDataSetFileOperationsManager implements IDataSe
                 try
                 {
                     dataSetPackager.close();
+
+                    List<String> errors =
+                            verify(file, new ZipFileIntegrityVerifier(),
+                                    new PathInfoCrcVerifier(new CrcProvider(datasetDescription.getDataSetCode())));
+
+                    if (errors.size() > 0)
+                    {
+                        throw new RuntimeException(errors.toString());
+                    }
+                    operationLog.info("Data set '" + dataSetCode + "' archived: " + file);
                 } catch (Exception ex)
                 {
-                    status = Status.createError("Couldn't close package file: " + file + ": " + ex);
+                    operationLog.error("Couldn't create package file: " + file, ex);
                 }
             }
             shareIdManager.releaseLock(dataSetCode);
@@ -175,6 +186,16 @@ public class DistributedPackagingDataSetFileOperationsManager implements IDataSe
         return status;
     }
 
+    private List<String> verify(File file, IArchiveFileVerifier... verifiers)
+    {
+        List<String> errors = new ArrayList<String>();
+        for (IArchiveFileVerifier verifier : verifiers)
+        {
+            errors.addAll(verifier.verify(file));
+        }
+        return errors;
+    }
+
     private AbstractDataSetPackager createPackager(File file, DataSetExistenceChecker dataSetExistenceChecker)
     {
         return new ZipDataSetPackager(file, compress, getContentProvider(), dataSetExistenceChecker);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/Verifier.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IArchiveFileVerifier.java
similarity index 87%
rename from datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/Verifier.java
rename to datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IArchiveFileVerifier.java
index ce61d68dbec120ea7a37f24b96a3a1235e038a25..b4ed208e1b51123948472d48d4fa93379188b0f4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/Verifier.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/IArchiveFileVerifier.java
@@ -16,12 +16,13 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard;
 
+import java.io.File;
 import java.util.List;
 
 /**
  * @author anttil
  */
-public interface Verifier
+public interface IArchiveFileVerifier
 {
-    public List<String> verify();
+    public List<String> verify(File file);
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFilePathInfoVerifier.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/PathInfoCrcVerifier.java
similarity index 90%
rename from datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFilePathInfoVerifier.java
rename to datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/PathInfoCrcVerifier.java
index 61b570bb7afac71a2a904d7442ea6b9a9f9a0bfb..25d6f8ed7302a06271ff050e43df2498d61277c1 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFilePathInfoVerifier.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/PathInfoCrcVerifier.java
@@ -29,21 +29,18 @@ import de.schlichtherle.util.zip.ZipFile;
 /**
  * @author anttil
  */
-public class ZipFilePathInfoVerifier implements Verifier
+public class PathInfoCrcVerifier implements IArchiveFileVerifier
 {
 
-    private final File file;
-
     private final ICrcProvider crcProvider;
 
-    public ZipFilePathInfoVerifier(File file, ICrcProvider crcProvider)
+    public PathInfoCrcVerifier(ICrcProvider crcProvider)
     {
-        this.file = file;
         this.crcProvider = crcProvider;
     }
 
     @Override
-    public List<String> verify()
+    public List<String> verify(File file)
     {
         List<String> errors = new ArrayList<String>();
         ZipFile zip;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileCrcVerifier.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileIntegrityVerifier.java
similarity index 94%
rename from datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileCrcVerifier.java
rename to datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileIntegrityVerifier.java
index 0eeb48854dc1f0b67defee2492012a9d42d04804..b3055dcd8c41ed20c6556a503c60c3fcd30626b0 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileCrcVerifier.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/ZipFileIntegrityVerifier.java
@@ -34,18 +34,11 @@ import de.schlichtherle.util.zip.ZipFile;
 /**
  * @author anttil
  */
-public class ZipFileCrcVerifier implements Verifier
+public class ZipFileIntegrityVerifier implements IArchiveFileVerifier
 {
 
-    private final File file;
-
-    public ZipFileCrcVerifier(File file)
-    {
-        this.file = file;
-    }
-
     @Override
-    public List<String> verify()
+    public List<String> verify(File file)
     {
         List<String> errors = new ArrayList<String>();
         ZipFile zip;
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java
index b132a332f9fff61c2eddcf5e7c5fbbc05be069b6..14338a0f59f92c57053da900e61ed8191bfe3e7d 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.dss.generic.shared;
 
 import java.util.List;
+import java.util.Map;
 
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo;
 
@@ -34,4 +35,5 @@ public interface IDataSetPathInfoProvider
 
     public ISingleDataSetPathInfoProvider tryGetSingleDataSetPathInfoProvider(String dataSetCode);
 
+    public Map<String, Integer> getDataSetChecksums(String dataSetCode);
 }