diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
index 06084e7ee2e3bd62b810bf25be781842a727fcc9..71f648a36a737f4a27a80adf167306fe188186fe 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTask.java
@@ -111,7 +111,6 @@ public class PathInfoDatabaseFeedingTask implements IMaintenanceTask, IPostRegis
 
     public void execute()
     {
-        // TODO don't load virtual data sets here or filter them out
         List<SimpleDataSetInformationDTO> dataSets = service.listDataSets();
         for (SimpleDataSetInformationDTO dataSet : dataSets)
         {
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 9051857dde95861f7e3776937786ed4f04da0095..4afaad4d9b72383374dc99faeb774286c9d66899 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
@@ -37,7 +37,6 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObject
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExperimentBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExperimentTable;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataBO;
-import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataTable;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IGroupBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IProjectBO;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IRoleAssignmentTable;
@@ -57,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ArchiverDataSetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypeWithVocabularyTerms;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
@@ -800,14 +800,18 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     public List<DataSetShareId> listShareIds(String sessionToken, String dataStore)
             throws UserFailureException
     {
-        List<ExternalDataPE> dataSets = loadDataSets(sessionToken, dataStore);
+        List<ExternalData> dataSets = loadDataSets(sessionToken, dataStore);
         ArrayList<DataSetShareId> shareIds = new ArrayList<DataSetShareId>();
-        for (ExternalDataPE dataSet : dataSets)
+        for (ExternalData dataSet : dataSets)
         {
-            DataSetShareId dataSetShareId = new DataSetShareId();
-            dataSetShareId.setDataSetCode(dataSet.getCode());
-            dataSetShareId.setShareId(dataSet.getShareId());
-            shareIds.add(dataSetShareId);
+            if (dataSet instanceof DataSet)
+            {
+                DataSet ds = (DataSet) dataSet;
+                DataSetShareId dataSetShareId = new DataSetShareId();
+                dataSetShareId.setDataSetCode(ds.getCode());
+                dataSetShareId.setShareId(ds.getShareId());
+                shareIds.add(dataSetShareId);
+            }
         }
         return shareIds;
     }
@@ -815,7 +819,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     public List<SimpleDataSetInformationDTO> listDataSets(String sessionToken, String dataStoreCode)
             throws UserFailureException
     {
-        List<ExternalDataPE> dataSets = loadDataSets(sessionToken, dataStoreCode);
+        List<ExternalData> dataSets = loadDataSets(sessionToken, dataStoreCode);
         return SimpleDataSetHelper.translate(dataSets);
     }
 
@@ -851,18 +855,17 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
         return result;
     }
 
-    private List<ExternalDataPE> loadDataSets(String sessionToken, String dataStoreCode)
+    private List<ExternalData> loadDataSets(String sessionToken, String dataStoreCode)
     {
         Session session = getSession(sessionToken);
+        IDatasetLister datasetLister = businessObjectFactory.createDatasetLister(session);
         DataStorePE dataStore =
                 getDAOFactory().getDataStoreDAO().tryToFindDataStoreByCode(dataStoreCode);
         if (dataStore == null)
         {
             throw new UserFailureException(String.format("Unknown data store '%s'", dataStoreCode));
         }
-        IExternalDataTable dataSetTable = businessObjectFactory.createExternalDataTable(session);
-        dataSetTable.loadByDataStore(dataStore);
-        return dataSetTable.getExternalData();
+        return datasetLister.listByDataStore(dataStore.getId());
     }
 
     public List<DeletedDataSet> listDeletedDataSets(String sessionToken,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
index 137c09868e93b7fd502cf2159710bc9091076987..562a285f0fdcbce1910abd52929875e1c542fb06 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java
@@ -343,6 +343,11 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         return asList(createPrimaryDatasets(asList(datasets)));
     }
 
+    public List<ExternalData> listByDataStore(long dataStoreID)
+    {
+        return enrichDatasets(query.getDatasetsByDataStoreId(dataStoreID));
+    }
+
     public List<ExternalData> listByTrackingCriteria(TrackingDataSetCriteria criteria)
     {
         DataIterator<DatasetRecord> dataSets;
@@ -645,7 +650,7 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         for (DatasetRecord record : records)
         {
             DataSetType dsType = dataSetTypes.get(record.dsty_id);
-            if (record.is_placeholder)
+            if (record.is_placeholder || record.location == null)
             {
                 // placeholder data sets are filtered out
             } else if (dsType.isContainerType())
@@ -665,13 +670,16 @@ public class DatasetLister extends AbstractLister implements IDatasetLister
         convertStandardProperties(dataSet, record);
 
         dataSet.setComplete(resolve(record.is_complete));
-        dataSet.setStatus(DataSetArchivingStatus.valueOf(record.status));
+        dataSet.setStatus(record.status == null ? null : DataSetArchivingStatus
+                .valueOf(record.status));
         dataSet.setSpeedHint(record.speed_hint == null ? Constants.DEFAULT_SPEED_HINT
                 : record.speed_hint);
-        dataSet.setFileFormatType(fileFormatTypes.get(record.ffty_id));
+        dataSet.setShareId(record.share_id);
+        dataSet.setFileFormatType(record.ffty_id == null ? null : fileFormatTypes
+                .get(record.ffty_id));
         dataSet.setLocation(record.location);
         dataSet.setSize(record.size);
-        dataSet.setLocatorType(locatorTypes.get(record.loty_id));
+        dataSet.setLocatorType(record.loty_id == null ? null : locatorTypes.get(record.loty_id));
         return dataSet;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
index 3ef3183b414e095df800c94fedf0fea8bacd324e..c22dde3e489c5ae4b2a4fe072a571f5546bbab4c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java
@@ -76,6 +76,11 @@ public interface IDatasetLister
      * Lists all data sets with specified codes. Unenriched data sets will be returned.
      */
     List<ExternalData> listByDatasetCode(Collection<String> datasetCodes);
+    
+    /**
+     * Lists all data sets of specified data store. Unenriched data sets will be returned.
+     */
+    List<ExternalData> listByDataStore(long dataStoreID);
 
     /** @return datasets with given ids */
     List<ExternalData> listByDatasetIds(Collection<Long> datasetIds);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
index 62319fb0fb67ac341ebe6a19db838e58dae62abb..e7816b22d05d5cca0dbdd03ccf9ca6c8194dee79 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
@@ -195,6 +195,9 @@ public interface IDatasetListingQuery extends TransactionQuery, IPropertyListing
         { StringArrayMapper.class }, fetchSize = FETCH_SIZE)
     public DataIterator<DatasetRecord> getDatasets(String[] datasetCodes);
 
+    @Select(sql = SELECT_ALL + " where data.dast_id = ?{1}", fetchSize = FETCH_SIZE)
+    public DataIterator<DatasetRecord> getDatasetsByDataStoreId(long dataStoreId);
+    
     /**
      * Returns the children dataset ids of the specified datasets.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
index 6201dff3dea67071ab9593b4e0d1da1094eb51ab..d690ac0cfbed2f1cb67d7081a440ebd62df1cca9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSet.java
@@ -28,6 +28,8 @@ public class DataSet extends ExternalData implements IDatasetLocation
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
     private Boolean complete;
+    
+    private String shareId;
 
     private String location;
 
@@ -51,6 +53,16 @@ public class DataSet extends ExternalData implements IDatasetLocation
         this.complete = complete;
     }
 
+    public void setShareId(String shareId)
+    {
+        this.shareId = shareId;
+    }
+
+    public String getShareId()
+    {
+        return shareId;
+    }
+
     @Override
     public String getLocation()
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
index 151f99b3386fd0de0931af680a3a72c01b9fe3e2..5da76b66351ab338d4974d46fd02c3c097832679 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.io.Serializable;
-import java.util.Collection;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
@@ -55,8 +54,6 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
 
     private String databaseInstanceCode;
     
-    private Collection<String> parentDataSetCodes;
-
     public void setDataStoreCode(String dataStoreCode)
     {
         this.dataStoreCode = dataStoreCode;
@@ -178,14 +175,4 @@ public class SimpleDataSetInformationDTO implements Serializable, IDatasetLocati
         this.databaseInstanceCode = dbInstanceCode;
     }
 
-    public Collection<String> getParentDataSetCodes()
-    {
-        return parentDataSetCodes;
-    }
-
-    public void setParentDataSetCodes(Collection<String> parentDataSetCodes)
-    {
-        this.parentDataSetCodes = parentDataSetCodes;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
index 9cfc5f5545b16a515d0c85602a7ce8601fd20ca0..9300849d6d3dcdb5df1b5c8f730587ce07972680 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelper.java
@@ -17,13 +17,11 @@
 package ch.systemsx.cisd.openbis.generic.shared.translator;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 /**
@@ -33,23 +31,25 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
  */
 public class SimpleDataSetHelper
 {
-    public static final List<SimpleDataSetInformationDTO> translate(
-            List<ExternalDataPE> externalData)
+    public static final List<SimpleDataSetInformationDTO> translate(List<ExternalData> externalData)
     {
         if (externalData == null)
         {
             return null;
         }
         List<SimpleDataSetInformationDTO> result = new ArrayList<SimpleDataSetInformationDTO>();
-        for (ExternalDataPE ed : externalData)
+        for (ExternalData ed : externalData)
         {
-            result.add(translate(ed));
+            if (ed instanceof DataSet)
+            {
+                DataSet dataSet = (DataSet) ed;
+                result.add(translate(dataSet));
+            }
         }
         return result;
     }
 
-    // TODO KE: use DataPE ?
-    private static SimpleDataSetInformationDTO translate(ExternalDataPE data)
+    private static SimpleDataSetInformationDTO translate(DataSet data)
     {
         SimpleDataSetInformationDTO result = new SimpleDataSetInformationDTO();
         result.setDataStoreCode(data.getDataStore().getCode());
@@ -59,22 +59,13 @@ public class SimpleDataSetHelper
         result.setDataSetLocation(data.getLocation());
         result.setDataSetSize(data.getSize());
         result.setDatabaseInstanceCode(data.getExperiment().getProject().getSpace()
-                .getDatabaseInstance().getCode());
+                .getInstance().getCode());
         result.setExperimentCode(data.getExperiment().getCode());
         result.setProjectCode(data.getExperiment().getProject().getCode());
         result.setGroupCode(data.getExperiment().getProject().getSpace().getCode());
-        SamplePE sampleOrNull = data.tryGetSample();
-        result.setSampleCode(sampleOrNull == null ? null : sampleOrNull.getCode());
+        result.setSampleCode(data.getSampleCode());
         result.setDataSetType(data.getDataSetType().getCode());
 
-        HashSet<String> parentCodes = new HashSet<String>();
-        for (DataPE parent : data.getParents())
-        {
-            parentCodes.add(parent.getCode());
-        }
-
-        result.setParentDataSetCodes(parentCodes);
-
         return result;
     }
     
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
index 56e837cf4477d464e080c03441d8f265333b8f0f..2f17ab457003eb51f451b82ec815f2179d341290 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/SimpleDataSetHelperTest.java
@@ -22,21 +22,21 @@ import java.util.List;
 import org.testng.AssertJUnit;
 import org.testng.annotations.Test;
 
-import ch.systemsx.cisd.common.types.BooleanOrUnknown;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.FileFormatTypePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 
 /**
  * 
@@ -48,10 +48,11 @@ public class SimpleDataSetHelperTest extends AssertJUnit
     @Test
     public void testTranslateList()
     {
-        ExternalDataPE ds1 = create(1);
-        ExternalDataPE ds2 = create(2);
+        ExternalData ds1 = create(1);
+        ExternalData ds2 = create(2);
+        ExternalData ds3 = new ContainerDataSet();
 
-        List<SimpleDataSetInformationDTO> list = SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2));
+        List<SimpleDataSetInformationDTO> list = SimpleDataSetHelper.translate(Arrays.asList(ds1, ds2, ds3));
         
         check(1, list.get(0));
         check(2, list.get(1));
@@ -62,49 +63,47 @@ public class SimpleDataSetHelperTest extends AssertJUnit
     @Test 
     public void testTranslateDescription()
     {
-        ExternalData ds = ExternalDataTranslator.translate(create(1), "", false);
-        DatasetDescription description = ExternalDataTranslator.translateToDescription(ds);
+        DatasetDescription description = ExternalDataTranslator.translateToDescription(create(1));
         
         SimpleDataSetInformationDTO result = SimpleDataSetHelper.translate(description);
         
         check(1, result);
     }
     
-    private ExternalDataPE create(long id)
+    private ExternalData create(long id)
     {
-        ExternalDataPE dataSet = new ExternalDataPE();
+        DataSet dataSet = new DataSet();
         dataSet.setId(id);
         dataSet.setCode("ds-" + id);
-        dataSet.setComplete(BooleanOrUnknown.T);
+        dataSet.setComplete(true);
         dataSet.setDataProducerCode("producer");
-        DataSetTypePE dataSetType = new DataSetTypePE();
+        DataSetType dataSetType = new DataSetType();
         dataSetType.setCode("MY-TYPE");
         dataSet.setDataSetType(dataSetType);
-        DataStorePE store = new DataStorePE();
+        DataStore store = new DataStore();
         store.setCode("MY-STORE");
         dataSet.setDataStore(store);
         dataSet.setDerived(true);
-        ExperimentPE experiment = new ExperimentPE();
+        Experiment experiment = new Experiment();
         experiment.setCode("MY-EXPERIMENT");
-        ExperimentTypePE experimentType = new ExperimentTypePE();
+        ExperimentType experimentType = new ExperimentType();
         experimentType.setCode("MY-EXPERIMENT-TYPE");
         experiment.setExperimentType(experimentType);
-        ProjectPE project = new ProjectPE();
+        Project project = new Project();
         project.setCode("MY-PROJECT");
-        SpacePE space = new SpacePE();
+        Space space = new Space();
         space.setCode("MY-SPACE");
-        DatabaseInstancePE databaseInstance = new DatabaseInstancePE();
+        DatabaseInstance databaseInstance = new DatabaseInstance();
         databaseInstance.setCode("MY-DB");
-        space.setDatabaseInstance(databaseInstance);
+        space.setInstance(databaseInstance);
         project.setSpace(space);
         experiment.setProject(project);
         dataSet.setExperiment(experiment);
-        FileFormatTypePE fileFormatType = new FileFormatTypePE();
+        FileFormatType fileFormatType = new FileFormatType();
         fileFormatType.setCode("MY_FILE_FORMAT");
         dataSet.setFileFormatType(fileFormatType);
         dataSet.setLocation("my-location");
-        dataSet.setPresentInArchive(true);
-        SamplePE sample = new SamplePE();
+        Sample sample = new Sample();
         sample.setCode("MY-SAMPLE");
         dataSet.setSample(sample);
         dataSet.setShareId("42");