diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java
index bc3cfbba532ee2e1abb79b642a68f3b4d15bfaca..0f70f41309d20bdf3bbc7751f34062b26b206b50 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java
@@ -183,6 +183,19 @@ public class SearchService implements ISearchService
         return samples;
     }
 
+    @Override
+    public List<IExperimentImmutable> searchForExperiments(SearchCriteria searchCriteria)
+    {
+
+        List<Experiment> serverExperiments = openBisService.searchForExperiments(searchCriteria);
+        ArrayList<IExperimentImmutable> experiments = new ArrayList<IExperimentImmutable>(serverExperiments.size());
+        for (Experiment experiment : serverExperiments)
+        {
+            experiments.add(new ExperimentImmutable(experiment));
+        }
+        return experiments;
+    }
+
     @Override
     public List<IMaterialImmutable> listMaterials(MaterialIdentifierCollection identifierCollection)
     {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java
index 6c542db8a3bf99dc8ca56e65fb179c07028ff06d..ea6b09a14ba5589fdaabf634e0a8291973302c62 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java
@@ -134,6 +134,15 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas
                 sampleIdMapper, AuthorizationHelper.EntityKind.SAMPLE);
     }
 
+    @Override
+    public List<Experiment> searchForExperiments(SearchCriteria searchCriteria)
+    {
+        List<Experiment> experiments = etlService.searchForExperiments(systemSessionToken, searchCriteria);
+
+        return AuthorizationHelper.filterToVisible(encapsulatedService, userName, experiments, experimentIdMapper,
+                AuthorizationHelper.EntityKind.EXPERIMENT);
+    }
+
     @Override
     @ManagedAuthentication
     public Sample tryGetSampleWithExperiment(SampleIdentifier sampleIdentifier)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
index 9d99ebbfb4a32b50d30c20eb49e90ab714955ac7..fe33627d51adf0689e0cd9c84d3c1b7357be3891 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java
@@ -824,6 +824,12 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
         return service.searchForDataSets(session.getSessionToken(), searchCriteria);
     }
 
+    @Override
+    public List<Experiment> searchForExperiments(SearchCriteria searchCriteria)
+    {
+        return service.searchForExperiments(session.getSessionToken(), searchCriteria);
+    }
+
     @Override
     public List<Project> listProjects()
     {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java
index c52763ab24a0b479c9260ace9a6c8d0ee4ab7f94..630493df990e10cfe4364c7646ab1d4c3712fe33 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java
@@ -95,6 +95,11 @@ public interface IEncapsulatedBasicOpenBISService
     @ManagedAuthentication
     public List<Sample> searchForSamples(SearchCriteria searchCriteria);
 
+    /**
+     * {@link IServiceForDataStoreServer#searchForExperiments(String, SearchCriteria)}
+     */
+    public List<Experiment> searchForExperiments(SearchCriteria searchCriteria);
+
     /**
      * Gets a sample with the specified identifier. Sample is enriched with properties and the experiment with properties.
      * 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java
index 3055778da37e231eeb703277fc5b05dd7f732797..8a5b6510d8c6b2d3d5b4d0658108cf823a6451ea 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java
@@ -34,8 +34,7 @@ public interface ISearchService
     public List<IExperimentImmutable> listExperiments(String projectIdentifier);
 
     /**
-     * List all data sets with a given value for a particular property, optionally restricted to a
-     * specific type.
+     * List all data sets with a given value for a particular property, optionally restricted to a specific type.
      * 
      * @param property The property of interest.
      * @param value The value the property should have. This may contain wildcards.
@@ -45,12 +44,10 @@ public interface ISearchService
             String typeOrNull);
 
     /**
-     * List all data sets with a given value for a particular property, optionally restricted to a
-     * specific type.
+     * List all data sets with a given value for a particular property, optionally restricted to a specific type.
      * 
      * @param property The property of interest.
-     * @param value The value the property should have. This may contain wildcards if
-     *            <var>escape</var> is set to <code>false</code>.
+     * @param value The value the property should have. This may contain wildcards if <var>escape</var> is set to <code>false</code>.
      * @param escape If <code>true</code>, escape the <var>value</var> to search for it verbatimly.
      * @return A list of matching data sets.
      */
@@ -58,8 +55,7 @@ public interface ISearchService
             String typeOrNull, boolean escape);
 
     /**
-     * List all samples with a given value for a particular property, optionally restricted to a
-     * specific type.
+     * List all samples with a given value for a particular property, optionally restricted to a specific type.
      * 
      * @param property The property of interest.
      * @param value The value the property should have. This may contain wildcards.
@@ -68,12 +64,10 @@ public interface ISearchService
     public List<ISampleImmutable> searchForSamples(String property, String value, String typeOrNull);
 
     /**
-     * List all samples with a given value for a particular property, optionally restricted to a
-     * specific type.
+     * List all samples with a given value for a particular property, optionally restricted to a specific type.
      * 
      * @param property The property of interest.
-     * @param value The value the property should have. This may contain wildcards if
-     *            <var>escape</var> is set to <code>false</code>.
+     * @param value The value the property should have. This may contain wildcards if <var>escape</var> is set to <code>false</code>.
      * @param escape If <code>true</code>, escape the <var>value</var> to search for it verbatimly.
      * @return A list of matching samples.
      */
@@ -97,23 +91,29 @@ public interface ISearchService
     public List<ISampleImmutable> searchForSamples(SearchCriteria searchCriteria);
 
     /**
-     * @param identifierCollection a collection containing the identifiers of the matching
-     *            materials. Identifiers that do not exist in the openBIS database are ignored.
+     * List all experiments that match the given searchCriteria.
+     * 
+     * @param searchCriteria The criteria to match against.
+     * @return A list of matching experiments.
+     */
+    public List<IExperimentImmutable> searchForExperiments(SearchCriteria searchCriteria);
+
+    /**
+     * @param identifierCollection a collection containing the identifiers of the matching materials. Identifiers that do not exist in the openBIS
+     *            database are ignored.
      * @return a list of materials matching the specified collection.
      */
     public List<IMaterialImmutable> listMaterials(MaterialIdentifierCollection identifierCollection);
 
     /**
-     * @return a controlled vocabulary with the given code. Returns null if the vocabulary with
-     *         given code is not found.
+     * @return a controlled vocabulary with the given code. Returns null if the vocabulary with given code is not found.
      * @deprecated use {@link #getVocabulary(String)} instead
      */
     @Deprecated
     public IVocabularyImmutable searchForVocabulary(String code);
 
     /**
-     * @return a controlled vocabulary with the given code. Returns null if the vocabulary with
-     *         given code is not found.
+     * @return a controlled vocabulary with the given code. Returns null if the vocabulary with given code is not found.
      */
     public IVocabularyImmutable getVocabulary(String code);