diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MetaDataBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MetaDataBuilder.java
index 5623c9b7d535f2433860da8aa2fd04b4b443c9d4..34888887b637cef9382bd9fa9b58c1fac6096ef9 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MetaDataBuilder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MetaDataBuilder.java
@@ -129,56 +129,45 @@ public class MetaDataBuilder
             for(int i = 0; i < dataSet.getContainerDataSets().size(); i++) {
                 //Container
                 ContainerDataSet container = dataSet.getContainerDataSets().get(i);
-                builder.container(i, "code", container.getCode());
-                builder.container(i, "permId", container.getPermId());
-                builder.container(i, "identifier", container.getIdentifier());
-                if(container.getDataSetType() != null) {
-                    builder.container(i, "type", container.getDataSetType().getCode());
-                }
+                builder.container(i, null, "code", container.getCode());
+                builder.container(i, null, "permId", container.getPermId());
+                builder.container(i, null, "identifier", container.getIdentifier());
+                builder.container(i, null, "type", container.getDataSetType().getCode());
                 if(container.getRegistrator() != null) {
-                    builder.container(i, "registrator", container.getRegistrator().getUserId());
-                }
-                if(container.getRegistrationDate() != null) {
-                    builder.container(i, "registration_date", container.getRegistrationDate().toString());
+                    builder.container(i, null, "registrator", container.getRegistrator().getUserId());
                 }
-                if(container.getModificationDate() != null) {
-                    builder.container(i, "modification_date", container.getModificationDate().toString());
+                builder.container(i, null, "registration_timestamp", container.getRegistrationDate().toString());
+                
+                builder.container(i, null, "is_measured", Boolean.toString(container.isDerived() == false));
+                if (container.tryGetAsDataSet() != null)
+                {
+                    final Boolean containerCompleteFlag = container.tryGetAsDataSet().getComplete();
+                    builder.container(i, null, "is_complete", Boolean.toString(BooleanOrUnknown.T.equals(containerCompleteFlag)));
                 }
+                
+                
+                builder.containerProperties(i, null, container.getProperties());
+                
                 //Container Experiment
-                if(container.getExperiment() != null) {
-                    builder.container(i, "experiment_code", container.getExperiment().getCode());
-                    builder.container(i, "experiment_permId", container.getExperiment().getPermId());
-                    builder.container(i, "experiment_identifier", container.getExperiment().getIdentifier());
-                    if(container.getExperiment().getExperimentType() != null) {
-                        builder.container(i, "experiment_type", container.getExperiment().getExperimentType().getCode());
-                    }
-                    if(container.getExperiment().getRegistrator() != null) {
-                        builder.container(i, "experiment_registrator", container.getExperiment().getRegistrator().getUserId());
-                    }
-                    if(container.getExperiment().getRegistrationDate() != null) {
-                        builder.container(i, "experiment_registration_date", container.getExperiment().getRegistrationDate().toString());
-                    }
-                    if(container.getExperiment().getModificationDate() != null) {
-                        builder.container(i, "experiment_modification_date", container.getExperiment().getModificationDate().toString());
-                    }
-                }
+                builder.container(i, EXPERIMENT , "code", container.getExperiment().getCode());
+                builder.container(i, EXPERIMENT , "permId", container.getExperiment().getPermId());
+                builder.container(i, EXPERIMENT , "identifier", container.getExperiment().getIdentifier());
+                builder.container(i, EXPERIMENT , "type", container.getExperiment().getExperimentType().getCode());
+                builder.container(i, EXPERIMENT , "registrator", container.getExperiment().getRegistrator().getUserId());
+                builder.container(i, EXPERIMENT , "registration_timestamp", container.getExperiment().getRegistrationDate().toString());
+                builder.container(i, EXPERIMENT, "space_code", container.getExperiment().getProject().getSpace().getCode());
+                builder.container(i, EXPERIMENT, "project_code", container.getExperiment().getProject().getCode());
+                builder.containerProperties(i, EXPERIMENT, container.getProperties());
+                    
                 //Container Sample
                 if(container.getSample() != null) {
-                    builder.container(i, "sample_code", container.getSample().getCode());
-                    builder.container(i, "sample_permId", container.getSample().getPermId());
-                    builder.container(i, "sample_identifier", container.getSample().getIdentifier());
-                    if(container.getSample().getSampleType() != null) {
-                        builder.container(i, "sample_type", container.getSample().getSampleType().getCode());
-                    }
-                    if(container.getSample().getRegistrator() != null) {
-                        builder.container(i, "sample_registrator", container.getSample().getRegistrator().getUserId());
-                    }
-                    if(container.getSample().getRegistrationDate() != null) {
-                        builder.container(i, "sample_registration_date", container.getSample().getRegistrationDate().toString());
-                    }
-                    if(container.getSample().getModificationDate() != null) {
-                        builder.container(i, "sample_modification_date", container.getSample().getModificationDate().toString());
-                    }
+                    builder.container(i, SAMPLE , "code", container.getSample().getCode());
+                    builder.container(i, SAMPLE , "permId", container.getSample().getPermId());
+                    builder.container(i, SAMPLE , "identifier", container.getSample().getIdentifier());
+                    builder.container(i, SAMPLE , "type", container.getSample().getSampleType().getCode());
+                    builder.container(i, SAMPLE , "registrator", container.getSample().getRegistrator().getUserId());
+                    builder.container(i, SAMPLE , "registration_timestamp", container.getSample().getRegistrationDate().toString());
+                    builder.containerProperties(i, SAMPLE, container.getSample().getProperties());
                 }
             }
         }
@@ -217,10 +206,23 @@ public class MetaDataBuilder
             addRow(category, property.getPropertyType().getCode(), property.tryGetAsString());
         }
     }
-
-    private void container(int number, String key, String value)
+    
+    private void container(int number, String subCategory, String key, String value)
     {
-        addRow(CONTAINER + "[" + number + "]", key, value);
+        if(subCategory != null) {
+            addRow(CONTAINER + "[" + number + "]." + subCategory, key, value);
+        } else {
+            addRow(CONTAINER + "[" + number + "]", key, value);
+        }
+    }
+    
+    private void containerProperties(int number, String subCategory, List<IEntityProperty> properties)
+    {
+        if(subCategory != null) {
+            addProperties(CONTAINER + "[" + number + "]." + subCategory, properties);
+        } else {
+            addProperties(CONTAINER + "[" + number + "]", properties);
+        }
     }
     
     private void dataSet(String key, String value)
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
index 676b9f0d2caa47103d582dd23110c2e9bee4c30f..1ed646ded2084d0a60218f6af0226236cf02c34a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/DistributedPackagingDataSetFileOperationsManager.java
@@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IShareIdManager;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IdentifierAttributeMappingManager;
 import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
@@ -332,6 +333,26 @@ public class DistributedPackagingDataSetFileOperationsManager implements IDataSe
         {
             dataSet.setSample(getService().tryGetSampleWithExperiment(SampleIdentifierFactory.parse(sampleIdentifier)));
         }
+        if(dataSet.getContainerDataSets() != null) {
+            for(int i = 0; i < dataSet.getContainerDataSets().size(); i++) {
+                //Container
+                ContainerDataSet container = dataSet.getContainerDataSets().get(i);
+                AbstractExternalData containerDataSet = getService().tryGetDataSet(container.getCode());
+                dataSet.getContainerDataSets().set(i, (ContainerDataSet) containerDataSet);
+                //Container Experiment
+                String containerExperimentIdentifier = datasetDescription.getExperimentIdentifier();
+                if (containerExperimentIdentifier != null)
+                {
+                    container.setExperiment(getService().tryGetExperiment(ExperimentIdentifierFactory.parse(containerExperimentIdentifier)));
+                }
+                //Container Sample
+                String containerSampleIdentifier = container.getSampleIdentifier();
+                if (containerSampleIdentifier != null)
+                {
+                    container.setSample(getService().tryGetSampleWithExperiment(SampleIdentifierFactory.parse(containerSampleIdentifier)));
+                }
+            }
+        }
         return dataSet;
     }