diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 660aeba314a5e833d91d715edc2228c70fb770fa..ba99c6fa3ae6697a47c44e066e501bee6e5c86ad 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -2394,7 +2394,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
         if (daoFactory.getDataDAO().confirmStorage(dataSetCode))
         {
             daoFactory.getPostRegistrationDAO().addDataSet(dataSetCode);
-        } else
+        } else if (daoFactory.getDataDAO().exists(dataSetCode) == false)
         {
             throw new UserFailureException("Storage confirmation for a dataset: " + dataSetCode
                     + " failed because the data set has been already deleted.");
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
index 12aa619e45e497dc515e46e9e67eb5d381f8a87c..6f44ba178c80918917be98bf21f39d93c9cf9115 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
@@ -162,10 +162,20 @@ public interface IDataDAO extends IGenericDAO<DataPE>
             throws DataAccessException;
 
     /**
-     * Confirms storage for the specified data set.
+     * Confirms a storage for the specified data set. It confirms the storage even if the data set
+     * is in the trash.
      * 
-     * @return Returns true if the storage confirmed value has been changed.
+     * @return Returns true if the data sets exists and the storage confirmed value has been
+     *         changed.
      */
     boolean confirmStorage(String dataSetCode);
 
+    /**
+     * Checks whether a data set with the specified code exists. It takes into consideration also
+     * data sets that are in the trash.
+     * 
+     * @return Returns true if the data set exists.
+     */
+    boolean exists(String dataSetCode);
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
index 7d9321d8bd61573fc94acba814bb9b705042f1d3..a9b702e1a47062830a050d697fe13c48453be362 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
@@ -1293,4 +1293,15 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple
         query.setString("code", dataSetCode);
         return query.executeUpdate() > 0;
     }
+
+    @Override
+    public boolean exists(String dataSetCode)
+    {
+        SQLQuery query =
+                getSession().createSQLQuery("select count(*) from data_all where code = :code");
+        query.setString("code", dataSetCode);
+        Number count = (Number) query.uniqueResult();
+        return count != null && count.intValue() > 0;
+    }
+
 }