diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index 7a88d9a33dc47143c2719c72da3d3ebacb7618d7..17eafa058b1b0f6c5d6f05603e29a8bada06b411 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -70,13 +70,11 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.dynamic_property.calc
 import ch.systemsx.cisd.openbis.generic.server.business.bo.dynamic_property.calculator.api.IEntityAdaptor;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.materiallister.IMaterialLister;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
-import ch.systemsx.cisd.openbis.generic.server.business.search.DataSetSearchManager;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataStoreDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IFileFormatTypeDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IHibernateSearchDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRoleAssignmentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.HibernateSearchDataProvider;
 import ch.systemsx.cisd.openbis.generic.server.plugin.IDataSetTypeSlaveServerPlugin;
@@ -914,16 +912,10 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
 
     public List<ExternalData> searchForDataSets(String sessionToken, DetailedSearchCriteria criteria)
     {
-        Session session = getSession(sessionToken);
-        try
-        {
-            IHibernateSearchDAO searchDAO = getDAOFactory().getHibernateSearchDAO();
-            IDatasetLister dataSetLister = createDatasetLister(session);
-            return new DataSetSearchManager(searchDAO, dataSetLister).searchForDataSets(criteria);
-        } catch (DataAccessException ex)
-        {
-            throw createUserFailureException(ex);
-        }
+        final Session session = getSession(sessionToken);
+        SearchHelper searchHelper =
+                new SearchHelper(session, businessObjectFactory, getDAOFactory());
+        return searchHelper.searchForDataSets(criteria);
     }
 
     public ExternalData getDataSetInfo(final String sessionToken, final TechId datasetId)
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 af1f540cc45529c76fd7e0db0b8c6f8152f7007c..5839dfba9144e44c3dd6600e7a15d522c610c7cf 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
@@ -1365,4 +1365,15 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         return searchHelper.searchForSamples(detailedSearchCriteria);
     }
 
+    public List<ExternalData> searchForDataSets(String sessionToken, SearchCriteria searchCriteria)
+    {
+        Session session = getSession(sessionToken);
+        DetailedSearchCriteria detailedSearchCriteria =
+                SearchCriteriaToDetailedSearchCriteriaTranslator.convert(
+                        SearchableEntityKind.DATA_SET, searchCriteria);
+        SearchHelper searchHelper =
+                new SearchHelper(session, businessObjectFactory, getDAOFactory());
+        return searchHelper.searchForDataSets(detailedSearchCriteria);
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
index 7c503106f226a8312146ad5b556b167e40676691..cb7bac3b0826cacfd46f2055946e507c286c4be6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceLogger.java
@@ -482,4 +482,9 @@ public class ETLServiceLogger extends AbstractServerLogger implements IETLServic
         return null;
     }
 
+    public List<ExternalData> searchForDataSets(String sessionToken, SearchCriteria searchCriteria)
+    {
+        logAccess(sessionToken, "searchForDataSets", "%s", searchCriteria);
+        return null;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/SearchHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/SearchHelper.java
index 8df2ff513f209b97606c55c67b1f1d6db909620a..ea6ef9b6dd1a3ed3c7f65f79e2ba46a28191c779 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/SearchHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/SearchHelper.java
@@ -21,11 +21,14 @@ import java.util.List;
 import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObjectFactory;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatasetLister;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
+import ch.systemsx.cisd.openbis.generic.server.business.search.DataSetSearchManager;
 import ch.systemsx.cisd.openbis.generic.server.business.search.SampleSearchManager;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IHibernateSearchDAO;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 
@@ -63,4 +66,18 @@ class SearchHelper
             throw CommonServer.createUserFailureException(ex);
         }
     }
+
+    public List<ExternalData> searchForDataSets(DetailedSearchCriteria detailedSearchCriteria)
+    {
+        try
+        {
+            IHibernateSearchDAO searchDAO = daoFactory.getHibernateSearchDAO();
+            IDatasetLister dataSetLister = businessObjectFactory.createDatasetLister(session);
+            return new DataSetSearchManager(searchDAO, dataSetLister)
+                    .searchForDataSets(detailedSearchCriteria);
+        } catch (DataAccessException ex)
+        {
+            throw CommonServer.createUserFailureException(ex);
+        }
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
index f955a5d60f3ad38506dc0505b87d6c60ad51c6cd..89a7bbd697d59a7cbb4d7e0da47dcd2b72d05d09 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java
@@ -692,4 +692,15 @@ public interface IETLLIMSService extends IServer, ISessionProvider
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria);
+
+    /**
+     * Search for data sets matching the provided criteria.
+     * 
+     * @param sessionToken The user authentication token. Must not be <code>null</code>.
+     * @param searchCriteria The criteria for data sets.
+     * @return A collection of data sets matching the search criteria.
+     */
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public List<ExternalData> searchForDataSets(String sessionToken, SearchCriteria searchCriteria);
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java.expected
index f955a5d60f3ad38506dc0505b87d6c60ad51c6cd..89a7bbd697d59a7cbb4d7e0da47dcd2b72d05d09 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java.expected
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/IETLLIMSService.java.expected
@@ -692,4 +692,15 @@ public interface IETLLIMSService extends IServer, ISessionProvider
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria);
+
+    /**
+     * Search for data sets matching the provided criteria.
+     * 
+     * @param sessionToken The user authentication token. Must not be <code>null</code>.
+     * @param searchCriteria The criteria for data sets.
+     * @return A collection of data sets matching the search criteria.
+     */
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public List<ExternalData> searchForDataSets(String sessionToken, SearchCriteria searchCriteria);
 }