diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
index 3621e331b362e491216eb868fbd73158bf500aa4..e48e373ea6f00c402a1acec51502e88cb498d9bd 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreService.java
@@ -63,7 +63,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.ISessionWorkspaceProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISequenceDatabase;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImportFile;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
@@ -514,7 +514,7 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
     }
 
     @Override
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken,
+    public List<SearchDomainSearchResult> searchForDataSetsWithSequences(String sessionToken,
             String preferredSequenceDatabaseOrNull, String sequenceSnippet,
             Map<String, String> optionalParametersOrNull)
     {
@@ -522,15 +522,15 @@ public class DataStoreService extends AbstractServiceWithLogger<IDataStoreServic
         ISequenceDatabase sequenceDatabase = findSequenceDatabase(provider, preferredSequenceDatabaseOrNull);
         if (sequenceDatabase != null)
         {
-            List<SequenceSearchResult> result = sequenceDatabase.search(sequenceSnippet, optionalParametersOrNull);
-            for (SequenceSearchResult sequenceSearchResult : result)
+            List<SearchDomainSearchResult> result = sequenceDatabase.search(sequenceSnippet, optionalParametersOrNull);
+            for (SearchDomainSearchResult sequenceSearchResult : result)
             {
-                sequenceSearchResult.setSequenceDatabaseName(sequenceDatabase.getName());
+                sequenceSearchResult.setSearchDomain(sequenceDatabase.getName());
             }
             return result;
         }
         operationLog.warn("No available sequence database found.");
-        return new ArrayList<SequenceSearchResult>();
+        return new ArrayList<SearchDomainSearchResult>();
     }
 
     private ISequenceDatabase findSequenceDatabase(PluginTaskProvider<ISequenceDatabase> provider,
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
index 1466957fab368b7466c8d53ce83835e631241990..906252f1d23101cca75e72a144a656eabdfc8a89 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java
@@ -26,7 +26,7 @@ import ch.systemsx.cisd.common.resource.IInitializable;
 import ch.systemsx.cisd.common.serviceconversation.ServiceMessage;
 import ch.systemsx.cisd.openbis.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImportFile;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
@@ -197,7 +197,7 @@ class DataStoreServiceLogger implements IDataStoreService, IInitializable
     }
 
     @Override
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken, 
+    public List<SearchDomainSearchResult> searchForDataSetsWithSequences(String sessionToken, 
             String preferredSequenceDatabaseOrNull, String sequenceSnippet, 
             Map<String, String> optionalParametersOrNull)
     {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/BlastDatabase.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/BlastDatabase.java
index 7e8dd0526039ada26a08e49b284ab5fe78adb614..e6f7a7a7a88fc5d177df3ebb8ce779caaa05ac9a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/BlastDatabase.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/BlastDatabase.java
@@ -44,7 +44,8 @@ import ch.systemsx.cisd.common.process.ProcessResult;
 import ch.systemsx.cisd.etlserver.plugins.BlastDatabaseCreationMaintenanceTask;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISequenceDatabase;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.BlastUtils;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFileSearchResultLocation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 
 /**
  * Implementation of {@link ISequenceDatabase} based on <a href="http://blast.ncbi.nlm.nih.gov/Blast.cgi">BLAST</a>. 
@@ -135,14 +136,14 @@ public class BlastDatabase extends AbstractSequenceDatabase
     }
     
     @Override
-    public List<SequenceSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
+    public List<SearchDomainSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
     {
         Map<String, String> parameters = new HashMap<String, String>();
         if (optionalParametersOrNull != null)
         {
             parameters.putAll(optionalParametersOrNull);
         }
-        List<SequenceSearchResult> result = new ArrayList<SequenceSearchResult>();
+        List<SearchDomainSearchResult> result = new ArrayList<SearchDomainSearchResult>();
         SequenceType sequenceType = FastaUtilities.determineSequenceType(sequenceSnippet);
         String queryFileName = new MessageFormat(QUERY_FILE_NAME_TEMPLATE).format(
                 new Object[] {new Date(), counter.getAndIncrement()});
@@ -158,11 +159,13 @@ public class BlastDatabase extends AbstractSequenceDatabase
                 Matcher matcher = STITLE_PATTERN.matcher(row[0]);
                 if (matcher.matches())
                 {
-                    SequenceSearchResult sequenceSearchResult = new SequenceSearchResult();
-                    sequenceSearchResult.setSequenceIdentifier(matcher.group(1));
-                    sequenceSearchResult.setDataSetCode(matcher.group(2));
-                    sequenceSearchResult.setPathInDataSet(matcher.group(3));
-                    sequenceSearchResult.setPositionInSequence(parse(row[1]));
+                    SearchDomainSearchResult sequenceSearchResult = new SearchDomainSearchResult();
+                    DataSetFileSearchResultLocation resultLocation = new DataSetFileSearchResultLocation();
+                    resultLocation.setSequenceIdentifier(matcher.group(1));
+                    resultLocation.setDataSetCode(matcher.group(2));
+                    resultLocation.setPathInDataSet(matcher.group(3));
+                    resultLocation.setPositionInSequence(parse(row[1]));
+                    sequenceSearchResult.setResultLocation(resultLocation);
                     result.add(sequenceSearchResult);
                 }
             }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/EchoDatabase.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/EchoDatabase.java
index e53451e969e40e6983050223e32c135031d8c7c2..c552078ed42108706204b90d6253039e40c83267 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/EchoDatabase.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/EchoDatabase.java
@@ -25,7 +25,7 @@ import java.util.Properties;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 
 /**
  * A test database that returns a search result that was stored in the parameters map under a key equal to the searched sequence snippet.
@@ -46,7 +46,7 @@ public class EchoDatabase extends AbstractSequenceDatabase
     }
 
     @Override
-    public List<SequenceSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
+    public List<SearchDomainSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
     {
         String resultStr = optionalParametersOrNull.get(sequenceSnippet);
         if (resultStr != null)
@@ -54,7 +54,7 @@ public class EchoDatabase extends AbstractSequenceDatabase
             try
             {
                 ObjectMapper mapper = new ObjectMapper();
-                SequenceSearchResult result = mapper.readValue(resultStr, SequenceSearchResult.class);
+                SearchDomainSearchResult result = mapper.readValue(resultStr, SearchDomainSearchResult.class);
                 return Collections.singletonList(result);
             } catch (Exception e)
             {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISequenceDatabase.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISequenceDatabase.java
index 7055d2745406fe656349854daa7bffccab5a5984..1e5894fed4627598654231b9165611b6fb2a60ba 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISequenceDatabase.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISequenceDatabase.java
@@ -21,7 +21,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 
 /**
  * Interface for a database for nucleotid or amonioacid sequences.
@@ -34,7 +34,7 @@ public interface ISequenceDatabase
 {
     /**
      * Returns the name of this sequence database instance. 
-     * Will be used to populated {@link SequenceSearchResult} instances of the search result..
+     * Will be used to populated {@link SearchDomainSearchResult} instances of the search result..
      */
     public String getName();
     
@@ -50,5 +50,5 @@ public interface ISequenceDatabase
      * @param optionalParametersOrNull Optional parameters which might be used. Can be <code>null</code>.
      * @return an empty list if nothing be found.
      */
-    public List<SequenceSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull);
+    public List<SearchDomainSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull);
 }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java
index 126f3a3a737cb031cde13ce5c13456865061a52a..477b4d6e70f9d83ccdbf81255e84fdcf67ba3ebf 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceTest.java
@@ -47,7 +47,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISequenceData
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.PluginUtilTest;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
 import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFileSearchResultLocation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.builders.DatasetDescriptionBuilder;
@@ -117,12 +118,14 @@ public class DataStoreServiceTest extends AssertJUnit
         }
 
         @Override
-        public List<SequenceSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
+        public List<SearchDomainSearchResult> search(String sequenceSnippet, Map<String, String> optionalParametersOrNull)
         {
             assertSame(SEQUENCE_SNIPPET, sequenceSnippet);
             assertSame(OPTIONAL_PARAMETERS, optionalParametersOrNull);
-            SequenceSearchResult sequenceSearchResult = new SequenceSearchResult();
-            sequenceSearchResult.setDataSetCode(dataSetCode);
+            SearchDomainSearchResult sequenceSearchResult = new SearchDomainSearchResult();
+            DataSetFileSearchResultLocation resultLocation = new DataSetFileSearchResultLocation();
+            sequenceSearchResult.setResultLocation(resultLocation);
+            resultLocation.setDataSetCode(dataSetCode);
             return Arrays.asList(sequenceSearchResult);
         }
         
@@ -184,7 +187,7 @@ public class DataStoreServiceTest extends AssertJUnit
         pluginTaskParameters = context.mock(IPluginTaskInfoProvider.class);
         preparePluginTaskInfoProvider();
 
-        List<SequenceSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
+        List<SearchDomainSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
                 null, SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
 
         assertEquals(0, result.size());
@@ -197,7 +200,7 @@ public class DataStoreServiceTest extends AssertJUnit
         pluginTaskParameters = context.mock(IPluginTaskInfoProvider.class);
         preparePluginTaskInfoProvider("-1", "-2");
         
-        List<SequenceSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
+        List<SearchDomainSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
                 null, SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
         
         assertEquals(0, result.size());
@@ -210,10 +213,10 @@ public class DataStoreServiceTest extends AssertJUnit
         pluginTaskParameters = context.mock(IPluginTaskInfoProvider.class);
         preparePluginTaskInfoProvider("1", "2");
         
-        List<SequenceSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
+        List<SearchDomainSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
                 null, SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
         
-        assertEquals("DS-1", result.get(0).getDataSetCode());
+        assertEquals("DS-1", ((DataSetFileSearchResultLocation) result.get(0).getResultLocation()).getDataSetCode());
         assertEquals(1, result.size());
         context.assertIsSatisfied();
     }
@@ -224,10 +227,10 @@ public class DataStoreServiceTest extends AssertJUnit
         pluginTaskParameters = context.mock(IPluginTaskInfoProvider.class);
         preparePluginTaskInfoProvider("1", "2");
         
-        List<SequenceSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
+        List<SearchDomainSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
                 "db-2", SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
         
-        assertEquals("DS-2", result.get(0).getDataSetCode());
+        assertEquals("DS-2", ((DataSetFileSearchResultLocation) result.get(0).getResultLocation()).getDataSetCode());
         assertEquals(1, result.size());
         context.assertIsSatisfied();
     }
@@ -238,10 +241,10 @@ public class DataStoreServiceTest extends AssertJUnit
         pluginTaskParameters = context.mock(IPluginTaskInfoProvider.class);
         preparePluginTaskInfoProvider("-1", "2", "-3", "4");
         
-        List<SequenceSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
+        List<SearchDomainSearchResult> result = createService().searchForDataSetsWithSequences(sessionToken, 
                 "db-3", SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
         
-        assertEquals("DS-2", result.get(0).getDataSetCode());
+        assertEquals("DS-2", ((DataSetFileSearchResultLocation) result.get(0).getResultLocation()).getDataSetCode());
         assertEquals(1, result.size());
         context.assertIsSatisfied();
     }
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 48d4adc7c275e2683a617fc6ba96893a7b906c09..363a4bdf374728c3d9a1adf5de4786311507bfca 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
@@ -86,7 +86,7 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ExternalD
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.MatchingEntityValidator;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ProjectValidator;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.SampleValidator;
-import ch.systemsx.cisd.openbis.generic.server.authorization.validator.SequenceSearchResultValidator;
+import ch.systemsx.cisd.openbis.generic.server.authorization.validator.SearchDomainSearchResultValidator;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.SpaceValidator;
 import ch.systemsx.cisd.openbis.generic.server.business.IPropertiesBatchManager;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.DataAccessExceptionTranslator;
@@ -1615,15 +1615,14 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
 
     @Override
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
-    @ReturnValueFilter(validatorClass = SequenceSearchResultValidator.class)
-    public List<SequenceSearchResultWithFullDataSet> searchForDataSetsWithSequences(String sessionToken,
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet,
-            Map<String, String> optionalParametersOrNull)
+    @ReturnValueFilter(validatorClass = SearchDomainSearchResultValidator.class)
+    public List<SearchDomainSearchResultWithFullDataSet> searchOnSearchDomain(String sessionToken, 
+            String preferredSearchDomainOrNull, String searchString, Map<String, String> optionalParametersOrNull)
     {
         Session session = getSession(sessionToken);
 
         IDataSetTable dataSetTable = businessObjectFactory.createDataSetTable(session);
-        return dataSetTable.searchForDataSetsWithSequences(preferredSequenceDatabaseOrNull, sequenceSnippet,
+        return dataSetTable.searchForDataSetsWithSequences(preferredSearchDomainOrNull, searchString,
                 optionalParametersOrNull);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index 4c5b2d1a5340c82167f197cc1bca5b576d3fddde..819d6968cae6936f90b4325664bb458c100ba947 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -109,7 +109,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptUpdateResult;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
@@ -697,12 +697,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
     }
 
     @Override
-    public List<SequenceSearchResultWithFullDataSet> searchForDataSetsWithSequences(String sessionToken,
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet,
-            Map<String, String> optionalParametersOrNull)
+    public List<SearchDomainSearchResultWithFullDataSet> searchOnSearchDomain(String sessionToken, 
+            String preferredSearchDomainOrNull, String searchString, Map<String, String> optionalParametersOrNull)
     {
-        logAccess(sessionToken, "search_for_datasets_with_sequences", "preferred_database(%s) sequence_snippet(%s)",
-                preferredSequenceDatabaseOrNull, sequenceSnippet);
+        logAccess(sessionToken, "search_on_search_domain", "preferred_search_domain(%s) seerch_string(%s)",
+                preferredSearchDomainOrNull, searchString);
         return null;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
index a3d377ebfc265806c594cf2a452b880976485129..ef3ad1162b1ffaf70c11c7a7510f4537352703f5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
@@ -93,8 +93,8 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchableEntityKind;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.IObjectId;
@@ -114,7 +114,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListMaterialCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentHolderPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AuthorizationGroupPE;
@@ -951,22 +951,22 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
     // There is no @ReturnValueFilter because commonServer.searchForDataSetsWithSequences() does already the filtering.
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken,
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet,
-            Map<String, String> optionalParametersOrNull)
+    public List<SearchDomainSearchResult> searchOnSearchDomain(String sessionToken, String preferredSearchDomainOrNull,
+            String searchString, Map<String, String> optionalParametersOrNull)
     {
         checkSession(sessionToken);
 
-        List<SequenceSearchResult> result = new ArrayList<SequenceSearchResult>();
-        List<SequenceSearchResultWithFullDataSet> list = commonServer.searchForDataSetsWithSequences(sessionToken,
-                preferredSequenceDatabaseOrNull, sequenceSnippet, optionalParametersOrNull);
-        for (SequenceSearchResultWithFullDataSet sequenceSearchResult : list)
+        List<SearchDomainSearchResult> result = new ArrayList<SearchDomainSearchResult>();
+        List<SearchDomainSearchResultWithFullDataSet> list = commonServer.searchOnSearchDomain(sessionToken,
+                preferredSearchDomainOrNull, searchString, optionalParametersOrNull);
+        for (SearchDomainSearchResultWithFullDataSet sequenceSearchResult : list)
         {
             result.add(sequenceSearchResult.getSearchResult());
         }
         return result;
     }
 
+
     @Override
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
index 8c810eeab6fe2ec71d004146ad95e763d0f8db29..d8affd3285e803cd6ef80e7831a4f79b781b0709 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
@@ -46,7 +46,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.IExperimentId;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.IMetaprojectId;
@@ -296,12 +296,11 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements
     }
 
     @Override
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken,
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet,
-            Map<String, String> optionalParametersOrNull)
+    public List<SearchDomainSearchResult> searchOnSearchDomain(String sessionToken, String preferredSearchDomainOrNull, 
+            String searchString, Map<String, String> optionalParametersOrNull)
     {
-        logAccess(sessionToken, "search-for-data-sets-with-sequences", "PREFERRED_DATABASE(%s) SEQUENCE_SNIPPET(%s)",
-                preferredSequenceDatabaseOrNull, sequenceSnippet);
+        logAccess(sessionToken, "search-on-search-domain", "PREFERRED_SEARCH_DOMAIN(%s) SEARCH_STRING(%s)",
+                preferredSearchDomainOrNull, searchString);
         return null;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SequenceSearchResultValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SearchDomainSearchResultValidator.java
similarity index 72%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SequenceSearchResultValidator.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SearchDomainSearchResultValidator.java
index 694c157557f014f2dcfc7fa08ab832d7a13c3a50..0b70d7dc4221391a4f1c0b4c1bd78ed7dde5296e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SequenceSearchResultValidator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SearchDomainSearchResultValidator.java
@@ -16,20 +16,20 @@
 
 package ch.systemsx.cisd.openbis.generic.server.authorization.validator;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 
 /**
- * Validator of @SequenceSearchResult.
+ * Validator of @SearchdoquenceSearchResult.
  * 
  * @author Franz-Josef Elmer
  */
-public class SequenceSearchResultValidator extends AbstractValidator<SequenceSearchResultWithFullDataSet>
+public class SearchDomainSearchResultValidator extends AbstractValidator<SearchDomainSearchResultWithFullDataSet>
 {
     private final ExternalDataValidator validator = new ExternalDataValidator();
 
     @Override
-    public boolean doValidation(PersonPE person, SequenceSearchResultWithFullDataSet value)
+    public boolean doValidation(PersonPE person, SearchDomainSearchResultWithFullDataSet value)
     {
         return validator.isValid(person, value.getDataSet());
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index c6611cc505c20e3d11d60c4e73adc7dc17395bb0..effdb604904a17348661ec0bce830dc28305c0b2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -61,7 +61,9 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.event.DeleteDataSetEve
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.util.KeyExtractorFactory;
 import ch.systemsx.cisd.openbis.generic.shared.Constants;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFileSearchResultLocation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.ISearchDomainResultLocation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithDifferentColumnCountException;
@@ -75,7 +77,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetBatchUpdateDetai
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO;
@@ -276,26 +278,31 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
     }
 
     @Override
-    public List<SequenceSearchResultWithFullDataSet> searchForDataSetsWithSequences(String preferredSequenceDatabaseOrNull,
+    public List<SearchDomainSearchResultWithFullDataSet> searchForDataSetsWithSequences(String preferredSequenceDatabaseOrNull,
             String sequenceSnippet, Map<String, String> optionalParametersOrNull)
     {
-        List<SequenceSearchResult> result = askAllDataStoreServers(preferredSequenceDatabaseOrNull,
+        List<SearchDomainSearchResult> result = askAllDataStoreServers(preferredSequenceDatabaseOrNull,
                 sequenceSnippet, optionalParametersOrNull);
         TableMap<String, AbstractExternalData> fullDataSetsByCode = listFullDataSets(result);
         return filterSearchResultAndInjectFullDataSets(result, fullDataSetsByCode);
     }
 
-    private List<SequenceSearchResultWithFullDataSet> filterSearchResultAndInjectFullDataSets(List<SequenceSearchResult> result,
+    private List<SearchDomainSearchResultWithFullDataSet> filterSearchResultAndInjectFullDataSets(List<SearchDomainSearchResult> result,
             TableMap<String, AbstractExternalData> fullDataSetsByCode)
     {
-        List<SequenceSearchResultWithFullDataSet> filteredResult = new ArrayList<SequenceSearchResultWithFullDataSet>();
-        for (SequenceSearchResult sequenceSearchResult : result)
+        List<SearchDomainSearchResultWithFullDataSet> filteredResult = new ArrayList<SearchDomainSearchResultWithFullDataSet>();
+        for (SearchDomainSearchResult sequenceSearchResult : result)
         {
-            String dataSetCode = sequenceSearchResult.getDataSetCode();
+            ISearchDomainResultLocation resultLocation = sequenceSearchResult.getResultLocation();
+            if (resultLocation instanceof DataSetFileSearchResultLocation == false)
+            {
+                continue;
+            }
+            String dataSetCode = ((DataSetFileSearchResultLocation) resultLocation).getDataSetCode();
             AbstractExternalData fullDataSet = fullDataSetsByCode.tryGet(dataSetCode);
             if (fullDataSet != null)
             {
-                SequenceSearchResultWithFullDataSet resultWithFullDataSet = new SequenceSearchResultWithFullDataSet();
+                SearchDomainSearchResultWithFullDataSet resultWithFullDataSet = new SearchDomainSearchResultWithFullDataSet();
                 resultWithFullDataSet.setDataSet(fullDataSet);
                 resultWithFullDataSet.setSearchResult(sequenceSearchResult);
                 filteredResult.add(resultWithFullDataSet);
@@ -304,7 +311,7 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
         return filteredResult;
     }
 
-    private TableMap<String, AbstractExternalData> listFullDataSets(List<SequenceSearchResult> result)
+    private TableMap<String, AbstractExternalData> listFullDataSets(List<SearchDomainSearchResult> result)
     {
         IKeyExtractor<String, AbstractExternalData> codeKeyExtractor = KeyExtractorFactory.<AbstractExternalData> createCodeKeyExtractor();
         if (result.isEmpty())
@@ -312,9 +319,14 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
             return new TableMap<String, AbstractExternalData>(codeKeyExtractor);
         }
         Set<String> codes = new LinkedHashSet<String>();
-        for (SequenceSearchResult sequenceSearchResult : result)
+        for (SearchDomainSearchResult sequenceSearchResult : result)
         {
-            codes.add(sequenceSearchResult.getDataSetCode());
+            ISearchDomainResultLocation resultLocation = sequenceSearchResult.getResultLocation();
+            if (resultLocation instanceof DataSetFileSearchResultLocation == false)
+            {
+                continue;
+            }
+            codes.add(((DataSetFileSearchResultLocation) resultLocation).getDataSetCode());
         }
         List<DataPE> fullDataSetPEs = getDataDAO().tryToFindFullDataSetsByCodes(codes, false, false);
         List<AbstractExternalData> fullDataSets = DataSetTranslator.translate(fullDataSetPEs, "?", "?",
@@ -322,10 +334,10 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
         return new TableMap<String, AbstractExternalData>(fullDataSets, codeKeyExtractor);
     }
 
-    private List<SequenceSearchResult> askAllDataStoreServers(String preferredSequenceDatabaseOrNull,
+    private List<SearchDomainSearchResult> askAllDataStoreServers(String preferredSequenceDatabaseOrNull,
             String sequenceSnippet, Map<String, String> optionalParametersOrNull)
     {
-        List<SequenceSearchResult> result = new ArrayList<SequenceSearchResult>();
+        List<SearchDomainSearchResult> result = new ArrayList<SearchDomainSearchResult>();
         List<DataStorePE> stores = getDataStoreDAO().listDataStores();
         for (DataStorePE dataStore : stores)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
index 714ba7e419d025600d0b29abdf3003dfecb40451..36d6cc6112335fe9c628b115e89881e36469bc83 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
@@ -21,7 +21,7 @@ import java.util.Map;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkModel;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO;
@@ -39,7 +39,7 @@ public interface IDataSetTable
     /**
      * Searchs for data sets with sequences.
      */
-    List<SequenceSearchResultWithFullDataSet> searchForDataSetsWithSequences(String preferredSequenceDatabaseOrNull,
+    List<SearchDomainSearchResultWithFullDataSet> searchForDataSetsWithSequences(String preferredSequenceDatabaseOrNull,
             String sequenceSnippet, Map<String, String> optionalParametersOrNull);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
index 3f371a0afbaef74a0c91fab0c9540c6f0305141d..1c50d89ca71267866fb0097441a2a46a08e61b3b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
@@ -104,7 +104,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptUpdateResult;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
@@ -659,12 +659,11 @@ public interface ICommonServer extends IServer
             DetailedSearchCriteria criteria);
 
     /**
-     * Searches for data sets which have nucleotid or aminoacid sequences in there files.
+     * Searches on a search domain.
      */
     @Transactional(readOnly = true)
-    public List<SequenceSearchResultWithFullDataSet> searchForDataSetsWithSequences(String sessionToken,
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet,
-            Map<String, String> optionalParametersOrNull);
+    public List<SearchDomainSearchResultWithFullDataSet> searchOnSearchDomain(String sessionToken, 
+            String preferredSearchDomainOrNull, String searchString, Map<String, String> optionalParametersOrNull);
 
     /**
      * Searches for data sets that fulfill the specified search criteria.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
index 566fa5ae5ce92c7f76ee3ac923aecb4dfd4d5f14..5ec24e9c623e6abdd571d846f0953d171a9c211b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IDataStoreService.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import ch.systemsx.cisd.common.exceptions.InvalidAuthenticationException;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Conversational;
 import ch.systemsx.cisd.openbis.common.conversation.annotation.Progress;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImportFile;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
@@ -175,7 +175,7 @@ public interface IDataStoreService
      * @since 10
      */
     @Conversational(progress = Progress.AUTOMATIC)
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken,
+    public List<SearchDomainSearchResult> searchForDataSetsWithSequences(String sessionToken,
             String preferredSequenceDatabaseOrNull, String sequenceSnippet,
             Map<String, String> optionalParametersOrNull);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SequenceSearchResultWithFullDataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SearchDomainSearchResultWithFullDataSet.java
similarity index 76%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SequenceSearchResultWithFullDataSet.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SearchDomainSearchResultWithFullDataSet.java
index a796500f26e34e0653098fa1e5f96d461fe471ae..7d504b3c4db3b059ac3cabe3457eb87db62d6c14 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SequenceSearchResultWithFullDataSet.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SearchDomainSearchResultWithFullDataSet.java
@@ -18,20 +18,20 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 import java.io.Serializable;
 
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 
 /**
- * Result of a sequence search.
+ * Result of a search in a search domain.
  * 
  * @author Franz-Josef Elmer
  */
-public class SequenceSearchResultWithFullDataSet implements Serializable
+public class SearchDomainSearchResultWithFullDataSet implements Serializable
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
     private AbstractExternalData dataSet;
 
-    private SequenceSearchResult searchResult;
+    private SearchDomainSearchResult searchResult;
 
     public AbstractExternalData getDataSet()
     {
@@ -43,12 +43,12 @@ public class SequenceSearchResultWithFullDataSet implements Serializable
         this.dataSet = dataSet;
     }
 
-    public SequenceSearchResult getSearchResult()
+    public SearchDomainSearchResult getSearchResult()
     {
         return searchResult;
     }
 
-    public void setSearchResult(SequenceSearchResult searchResult)
+    public void setSearchResult(SearchDomainSearchResult searchResult)
     {
         this.searchResult = searchResult;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js
index 6f88786baf584ef75507173c6210f2b14946ade1..158e9b2eea8a9a6ea99132e152fd3025b9bf0f8f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/js/openbis.js
@@ -861,16 +861,16 @@ openbis.prototype.searchForDataSetsOnBehalfOfUser = function(searchCriteria, use
 }
 
 /**
- * @see IGeneralInformationService.searchForDataSetsWithSequences(String, String, String, Map<String, String>)
+ * @see IGeneralInformationService.searchOnSearchDomain(String, String, String, Map<String, String>)
  * @method
  */
-openbis.prototype.searchForDataSetsWithSequences = function(preferredSequenceDatabaseOrNull, sequenceSnippet, optionalParametersOrNull, action) {
+openbis.prototype.searchOnSearchDomain = function(preferredSearchDomainOrNull, searchString, optionalParametersOrNull, action) {
 	this._internal.ajaxRequest({
 		url: this._internal.generalInfoServiceUrl,
-		data: { "method" : "searchForDataSetsWithSequences",
+		data: { "method" : "searchOnSearchDomain",
 				"params" : [ this.getSession(),
-							 preferredSequenceDatabaseOrNull,
-							 sequenceSnippet, optionalParametersOrNull ] },
+							 preferredSearchDomainOrNull,
+							 searchString, optionalParametersOrNull ] },
 		success: action
 	});
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
index 849953c59b21e12ac5a17bd1fff45c89929d5f79..b13e6887d3289ed78b411793e353b246aba37927 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
@@ -47,14 +47,15 @@ import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.event.DeleteDataSetEventBuilder;
 import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFileSearchResultLocation;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SequenceSearchResultWithFullDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchDomainSearchResultWithFullDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
@@ -186,18 +187,21 @@ public final class DataSetTableTest extends AbstractBOTest
                 }
             });
 
-        List<SequenceSearchResultWithFullDataSet> results =
+        List<SearchDomainSearchResultWithFullDataSet> results =
                 createDataSetTable().searchForDataSetsWithSequences(SEQUENCE_DATABASE, SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
 
-        assertEquals("Database: test-db, Data set: ds1, path: ds1/path, identifier: [id-ds1], position: 42",
+        assertEquals("Search Domain: test-db, Result location: [Data set: ds1, path: ds1/path, "
+                + "identifier: [id-ds1], position: 42]",
                 results.get(0).getSearchResult().toString());
         assertEquals(ds1.getCode(), results.get(0).getDataSet().getCode());
         assertEquals("/G1/P1/exp1", results.get(0).getDataSet().getExperiment().getIdentifier());
-        assertEquals("Database: test-db, Data set: ds3, path: ds3/path, identifier: [id-ds3], position: 42",
+        assertEquals("Search Domain: test-db, Result location: [Data set: ds3, path: ds3/path, "
+                + "identifier: [id-ds3], position: 42]",
                 results.get(1).getSearchResult().toString());
         assertEquals(ds3.getCode(), results.get(1).getDataSet().getCode());
         assertEquals("/G1/P1/exp1", results.get(1).getDataSet().getExperiment().getIdentifier());
-        assertEquals("Database: test-db, Data set: ds3, path: ds3/path, identifier: [id-ds3], position: 42",
+        assertEquals("Search Domain: test-db, Result location: [Data set: ds3, path: ds3/path, "
+                + "identifier: [id-ds3], position: 42]",
                 results.get(2).getSearchResult().toString());
         assertEquals(ds3.getCode(), results.get(2).getDataSet().getCode());
         assertEquals("/G1/P1/exp1", results.get(2).getDataSet().getExperiment().getIdentifier());
@@ -227,15 +231,17 @@ public final class DataSetTableTest extends AbstractBOTest
 
                     one(service).searchForDataSetsWithSequences(dataStore.getSessionToken(),
                             SEQUENCE_DATABASE, SEQUENCE_SNIPPET, OPTIONAL_PARAMETERS);
-                    List<SequenceSearchResult> results = new ArrayList<SequenceSearchResult>();
+                    List<SearchDomainSearchResult> results = new ArrayList<SearchDomainSearchResult>();
                     for (String foundDataSet : foundDataSets)
                     {
-                        SequenceSearchResult result = new SequenceSearchResult();
-                        result.setSequenceDatabaseName("test-db");
-                        result.setDataSetCode(foundDataSet);
-                        result.setPathInDataSet(foundDataSet + "/path");
-                        result.setPositionInSequence(42);
-                        result.setSequenceIdentifier("id-" + foundDataSet);
+                        SearchDomainSearchResult result = new SearchDomainSearchResult();
+                        result.setSearchDomain("test-db");
+                        DataSetFileSearchResultLocation resultLocation = new DataSetFileSearchResultLocation();
+                        resultLocation.setDataSetCode(foundDataSet);
+                        resultLocation.setPathInDataSet(foundDataSet + "/path");
+                        resultLocation.setPositionInSequence(42);
+                        resultLocation.setSequenceIdentifier("id-" + foundDataSet);
+                        result.setResultLocation(resultLocation);
                         results.add(result);
                     }
                     will(returnValue(results));
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
index 75153ba64d53ec09b8e87fd9d37b72524ff028d9..6ba9353657ccee4e693710707ee19c1205b9e542 100644
--- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
@@ -44,7 +44,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SequenceSearchResult;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.IExperimentId;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.IMetaprojectId;
@@ -398,18 +398,17 @@ public interface IGeneralInformationService extends IRpcService
             EnumSet<DataSetFetchOption> fetchOptions);
 
     /**
-     * Searches for data sets which have nucleotid or amoniacid sequences in there files. 
-     * If no preferred sequence database is specified the first available one will be used. If the
-     * preferred sequence database doesn't exist or isn't available also the first available database will be used.
+     * Searches on a search domain. If no preferred search domain is specified the first available one will be used. 
+     * If the preferred sequence search domain doesn't exist or isn't available also the first available one will be used.
      * 
-     * @param preferredSequenceDatabaseOrNull The key of the preferred sequence database or <code>null</code>.
-     * @param sequenceSnippet A snippet of a sequence to search for.
+     * @param preferredSearchDomainOrNull The key of the preferred search domain or <code>null</code>.
+     * @param searchString The search string.
      * @param optionalParametersOrNull Optional parameters. Can be <code>null</code>. 
-     *          The semantics depends on the type of the used sequence database.
+     *          The semantics depends on the type of search domain.
      * @since 1.29
      */
-    public List<SequenceSearchResult> searchForDataSetsWithSequences(String sessionToken, 
-            String preferredSequenceDatabaseOrNull, String sequenceSnippet, 
+    public List<SearchDomainSearchResult> searchOnSearchDomain(String sessionToken, 
+            String preferredSearchDomainOrNull, String searchString, 
             Map<String, String> optionalParametersOrNull);
     
     /**
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SequenceSearchResult.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSetFileSearchResultLocation.java
similarity index 72%
rename from openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SequenceSearchResult.java
rename to openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSetFileSearchResultLocation.java
index bec456d9040047cdcb482fa411cafd3f7b912fb0..f8af6ad5beb101b66cacfc6d0676376a0fc739ad 100644
--- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SequenceSearchResult.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSetFileSearchResultLocation.java
@@ -16,23 +16,18 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
 
-import java.io.Serializable;
-
 import ch.systemsx.cisd.base.annotation.JsonObject;
 
 /**
- * Result of a sequence search. Returns the code of the data set where the sequence has been found,
- * the path of the file inside the data set which has the found sequence, and the sequence identifier.
+ * Result location for a search in a sequence in a file in data set.
  *
  * @author Franz-Josef Elmer
  */
-@JsonObject("SequenceSearchResult")
-public class SequenceSearchResult implements Serializable
+@JsonObject("DataSetFileSearchResultLocation")
+public class DataSetFileSearchResultLocation implements ISearchDomainResultLocation
 {
     private static final long serialVersionUID = 1L;
     
-    private String sequenceDatabaseName;
-    
     private String dataSetCode;
     
     private String pathInDataSet;
@@ -41,16 +36,6 @@ public class SequenceSearchResult implements Serializable
     
     private int positionInSequence;
 
-    public String getSequenceDatabaseName()
-    {
-        return sequenceDatabaseName;
-    }
-
-    public void setSequenceDatabaseName(String sequenceDatabaseKey)
-    {
-        this.sequenceDatabaseName = sequenceDatabaseKey;
-    }
-
     public String getDataSetCode()
     {
         return dataSetCode;
@@ -94,8 +79,9 @@ public class SequenceSearchResult implements Serializable
     @Override
     public String toString()
     {
-        return "Database: " + sequenceDatabaseName + ", Data set: " + dataSetCode + ", path: " + pathInDataSet 
+        return "Data set: " + dataSetCode + ", path: " + pathInDataSet 
                 + ", identifier: [" + sequenceIdentifier + "], position: " + positionInSequence;
     }
 
+
 }
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/ISearchDomainResultLocation.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/ISearchDomainResultLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..276bacfce0d47af0fe570ca58ec91db30857f0af
--- /dev/null
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/ISearchDomainResultLocation.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2014 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+/**
+ * Marker interface specifying the location of search result on a search domain.
+ *
+ * @author Franz-Josef Elmer
+ */
+public interface ISearchDomainResultLocation extends Serializable
+{
+
+}
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SearchDomainSearchResult.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SearchDomainSearchResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..868ee97cec5f89df13464bdff526c6a34d4bc715
--- /dev/null
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/SearchDomainSearchResult.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2014 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * Result of a search on a search domain.
+ *
+ * @author Franz-Josef Elmer
+ */
+@JsonObject("SearchDomainSearchResult")
+public class SearchDomainSearchResult implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    
+    private String searchDomain;
+    
+    private ISearchDomainResultLocation resultLocation;
+
+    public String getSearchDomain()
+    {
+        return searchDomain;
+    }
+    
+    public void setSearchDomain(String searchDomain)
+    {
+        this.searchDomain = searchDomain;
+    }
+    
+    public ISearchDomainResultLocation getResultLocation()
+    {
+        return resultLocation;
+    }
+
+    public void setResultLocation(ISearchDomainResultLocation resultLocation)
+    {
+        this.resultLocation = resultLocation;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "Search Domain: " + getSearchDomain() + ", Result location: [" + resultLocation + "]";
+    }
+
+}