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 eeb845ae0826f4c0896febee33a24c4397d1e5e2..1dc04eff195b9120ebf9ec2f2f1ee30df36de9bb 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
@@ -137,16 +137,17 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
     }
 
     @Override
-    public List<DataSetPathInfo> listPathInfosByRegularExpression(
+    public Map<String, List<DataSetPathInfo>> listPathInfosByRegularExpression(
             String substring)
     {
         List<ExtendedDataSetFileRecord> fileRecords = getDao().listFilesByRelativePathLikeExpression("%" + substring + "%");
-        List<DataSetPathInfo> pathInfos = new ArrayList<DataSetPathInfo>(fileRecords.size());
+
+        Map<String, List<DataSetPathInfo>> allPathInfos = new HashMap<String, List<DataSetPathInfo>>();
         for (ExtendedDataSetFileRecord fileRecord : fileRecords)
         {
+            // Build new info
             DataSetPathInfo dataSetPathInfo = new DataSetPathInfo();
             dataSetPathInfo.setChecksumCRC32(fileRecord.checksum_crc32);
-            dataSetPathInfo.setDataSetCode(fileRecord.code);
             dataSetPathInfo.setDirectory(fileRecord.is_directory);
             dataSetPathInfo.setFileName(fileRecord.file_name);
             dataSetPathInfo.setId(fileRecord.id);
@@ -159,9 +160,17 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro
                 dataSetPathInfoParent.setId(fileRecord.parent_id);
                 dataSetPathInfo.setParent(dataSetPathInfoParent);
             }
-            pathInfos.add(dataSetPathInfo);
+
+            // Add to dataSetCode list
+            List<DataSetPathInfo> dataSetPathInfos = allPathInfos.get(fileRecord.code);
+            if (dataSetPathInfos == null)
+            {
+                dataSetPathInfos = new ArrayList<DataSetPathInfo>();
+                allPathInfos.put(fileRecord.code, dataSetPathInfos);
+            }
+            dataSetPathInfos.add(dataSetPathInfo);
         }
-        return pathInfos;
+        return allPathInfos;
     }
 
     @Override
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java
index 3745f19a9a44a6b1cc8ac066da3367e746aee8f6..d6918b99434997d6f434853e72b13e9e4ed41005 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java
@@ -33,30 +33,33 @@ public class FileSearchDomain extends AbstractSearchDomainService
     public List<SearchDomainSearchResult> search(String searchString, Map<String, String> optionalParametersOrNull)
     {
         IDataSetPathInfoProvider dataSetPathInfoProvider = ServiceProvider.getDataSetPathInfoProvider();
-        List<DataSetPathInfo> dataSetPathInfos = dataSetPathInfoProvider.listPathInfosByRegularExpression(searchString);
+        Map<String, List<DataSetPathInfo>> allPathInfos = dataSetPathInfoProvider.listPathInfosByRegularExpression(searchString);
 
         List<SearchDomainSearchResult> results = new ArrayList<SearchDomainSearchResult>();
 
-        for (DataSetPathInfo dataSetPathInfo : dataSetPathInfos)
+        for (String datasetCode : allPathInfos.keySet())
         {
+            List<DataSetPathInfo> dataSetPathInfos = allPathInfos.get(datasetCode);
 
-            SearchDomainSearchResult searchDomainSearchResult = new SearchDomainSearchResult();
+            for (DataSetPathInfo dataSetPathInfo : dataSetPathInfos)
+            {
+                SearchDomainSearchResult searchDomainSearchResult = new SearchDomainSearchResult();
 
-            SearchDomain searchDomain = new SearchDomain();
-            searchDomain.setName("File");
-            searchDomain.setLabel("File");
+                SearchDomain searchDomain = new SearchDomain();
+                searchDomain.setName("File");
+                searchDomain.setLabel("File");
 
-            searchDomainSearchResult.setSearchDomain(searchDomain);
+                searchDomainSearchResult.setSearchDomain(searchDomain);
 
-            DataSetFileSearchResultLocation dfsrl = new DataSetFileSearchResultLocation();
-            dfsrl.setPermId(dataSetPathInfo.getDataSetCode());
-            dfsrl.setCode(dataSetPathInfo.getDataSetCode());
-            dfsrl.setIdentifier(dataSetPathInfo.getDataSetCode());
-            dfsrl.setPathInDataSet(dataSetPathInfo.getRelativePath());
-            dfsrl.setEntityKind(EntityKind.DATA_SET);
+                DataSetFileSearchResultLocation dfsrl = new DataSetFileSearchResultLocation();
+                dfsrl.setPermId(datasetCode);
+                dfsrl.setCode(datasetCode);
+                dfsrl.setPathInDataSet(dataSetPathInfo.getRelativePath());
+                dfsrl.setEntityKind(EntityKind.DATA_SET);
 
-            searchDomainSearchResult.setResultLocation(dfsrl);
-            results.add(searchDomainSearchResult);
+                searchDomainSearchResult.setResultLocation(dfsrl);
+                results.add(searchDomainSearchResult);
+            }
         }
 
         return results;
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 ed4ae0c63babf7bcf4e03671be1062961c8be1b1..318068b658d1dfcb61402d11e7301c0619fb0270 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
@@ -31,7 +31,7 @@ public interface IDataSetPathInfoProvider
 
     public List<DataSetPathInfo> listPathInfosByRegularExpression(String dataSetCode, String regularExpression);
 
-    public List<DataSetPathInfo> listPathInfosByRegularExpression(String regularExpression);
+    public Map<String, List<DataSetPathInfo>> listPathInfosByRegularExpression(String regularExpression);
 
     public DataSetPathInfo tryGetFullDataSetRootPathInfo(String dataSetCode);
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
index 5cc02a18a0088f3fceb5ea5beb641b0723a74aa6..6f8bf177b7606fb21924bd84498fdd31b7880f9a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java
@@ -27,8 +27,6 @@ public class DataSetPathInfo
 {
     private long id;
 
-    private String dataSetCode;
-
     private String fileName;
 
     private String relativePath;
@@ -137,14 +135,4 @@ public class DataSetPathInfo
     {
         children.add(child);
     }
-
-    public String getDataSetCode()
-    {
-        return dataSetCode;
-    }
-
-    public void setDataSetCode(String dataSetCode)
-    {
-        this.dataSetCode = dataSetCode;
-    }
 }