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 eba058b0ca4ffdee15ec64e880fabc775c32d359..97cde4b4c38cf8f033aba951b7a3c3eaea9c63e7 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
@@ -1217,7 +1217,7 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
     {
         final Session session = getSession(sessionToken);
         ArrayList<ExternalDataPE> dataSetsCreated = new ArrayList<ExternalDataPE>();
-        ArrayList<NewExternalData> dataSetRegistrations =
+        ArrayList<? extends NewExternalData> dataSetRegistrations =
                 operationDetails.getDataSetRegistrations();
         for (NewExternalData dataSet : dataSetRegistrations)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
index a894bbd314b645bcf5bb4e6564144ae8c21d8432..64d2c7fd338a5477437815fe82e45375edb646d3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java
@@ -55,12 +55,12 @@ public class AtomicEntityOperationDetails implements Serializable
 
     private final ArrayList<NewSample> sampleRegistrations;
 
-    private final ArrayList<NewExternalData> dataSetRegistrations;
+    private final ArrayList<? extends NewExternalData> dataSetRegistrations;
 
     public AtomicEntityOperationDetails(String userIdOrNull, List<NewSpace> spaceRegistrations,
-            List<NewProject> projectRegistrations,
-            List<NewExperiment> experimentRegistrations, List<SampleUpdatesDTO> sampleUpdates,
-            List<NewSample> sampleRegistrations, List<NewExternalData> dataSetRegistrations)
+            List<NewProject> projectRegistrations, List<NewExperiment> experimentRegistrations,
+            List<SampleUpdatesDTO> sampleUpdates, List<NewSample> sampleRegistrations,
+            List<? extends NewExternalData> dataSetRegistrations)
     {
         this.userIdOrNull = userIdOrNull;
         this.spaceRegistrations = new ArrayList<NewSpace>(spaceRegistrations);
@@ -97,7 +97,7 @@ public class AtomicEntityOperationDetails implements Serializable
         return sampleRegistrations;
     }
 
-    public ArrayList<NewExternalData> getDataSetRegistrations()
+    public ArrayList<? extends NewExternalData> getDataSetRegistrations()
     {
         return dataSetRegistrations;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewContainerDataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewContainerDataSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..716f7da383cf2c2090a77e796722a9aad785689f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewContainerDataSet.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * 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.dto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class NewContainerDataSet extends NewExternalData
+{
+    private static final long serialVersionUID = 1L;
+
+    private List<String> containedDataSetCodes = new ArrayList<String>();
+
+    public List<String> getContainedDataSetCodes()
+    {
+        return containedDataSetCodes;
+    }
+
+    public void setContainedDataSetCodes(List<String> containedDataSetCodes)
+    {
+        this.containedDataSetCodes = containedDataSetCodes;
+    }
+    
+    
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewDataSet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewDataSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..74d11fba1a0201388d628cbc11c7a59f5aa819b7
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewDataSet.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * 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.dto;
+
+/**
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class NewDataSet extends NewExternalData
+{
+    private static final long serialVersionUID = 1L;
+
+    // The following fields and methods should eventually be moved here, but it's too difficult to
+    // do this now.
+
+    // private String shareId;
+    //
+    // private String location;
+    //
+    // private int speedHint;
+    //
+    // private FileFormatType fileFormatType;
+    //
+    // private LocatorType locatorType;
+    //
+    // private BooleanOrUnknown complete = BooleanOrUnknown.U;
+    //
+    // public String getShareId()
+    // {
+    // return shareId;
+    // }
+    //
+    // public void setShareId(String shareId)
+    // {
+    // this.shareId = shareId;
+    // }
+    //
+    // public int getSpeedHint()
+    // {
+    // return speedHint;
+    // }
+    //
+    // public void setSpeedHint(int speedHint)
+    // {
+    // this.speedHint = speedHint;
+    // }
+    //
+    // /** Returns <code>locator</code>. */
+    // public final String getLocation()
+    // {
+    // return location;
+    // }
+    //
+    // /** Sets <code>locator</code>. */
+    // public final void setLocation(final String locator)
+    // {
+    // this.location = locator;
+    // }
+    //
+    // /** Returns <code>fileFormatType</code>. */
+    // public final FileFormatType getFileFormatType()
+    // {
+    // return fileFormatType;
+    // }
+    //
+    // /** Sets <code>fileFormatType</code>. */
+    // public final void setFileFormatType(final FileFormatType fileFormatType)
+    // {
+    // this.fileFormatType = fileFormatType;
+    // }
+    //
+    // /** Returns <code>locatorType</code>. */
+    // public final LocatorType getLocatorType()
+    // {
+    // return locatorType;
+    // }
+    //
+    // /** Sets <code>locatorType</code>. */
+    // public final void setLocatorType(final LocatorType locatorType)
+    // {
+    // this.locatorType = locatorType;
+    // }
+    //
+    // /**
+    // * Returns {@link BooleanOrUnknown#T}, if the data set is complete in the data store and
+    // * {@link BooleanOrUnknown#F}, if some parts of the data are missing. If the completeness is
+    // not
+    // * known (e.g. because the data set is stored in a format that does not allow to assess the
+    // * completeness, {@link BooleanOrUnknown#U} is returned.
+    // */
+    // public final BooleanOrUnknown getComplete()
+    // {
+    // return complete;
+    // }
+    //
+    // /**
+    // * Sets whether this data set is complete in the data store or not. The default is
+    // * {@link BooleanOrUnknown#U}, which corresponds to the case where the data are stored in a
+    // * format that does not allow to assess completeness.
+    // */
+    // public final void setComplete(final BooleanOrUnknown complete)
+    // {
+    // this.complete = complete;
+    // }
+    //
+    // public final boolean equals(final NewDataSet obj)
+    // {
+    // if (obj == this)
+    // {
+    // return true;
+    // }
+    // if (obj == null)
+    // {
+    // return false;
+    // }
+    // final NewDataSet that = obj;
+    // final EqualsBuilder builder = new EqualsBuilder();
+    // builder.append(that.location, location);
+    // return builder.isEquals();
+    // }
+    //
+    // @Override
+    // public int hashCode()
+    // {
+    // final HashCodeBuilder builder = new HashCodeBuilder();
+    // builder.append(location);
+    // return builder.toHashCode();
+    // }
+    //
+    // @Override
+    // public String toString()
+    // {
+    // ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
+    // builder.append("code", getCode());
+    // builder.append("type", getDataSetType());
+    // builder.append("fileFormat", getFileFormatType());
+    // builder.append("properties", getDataSetProperties());
+    // return builder.toString();
+    // }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java
index 0399619d98e28917e71ace970073235e2646cfcb..073341386c5c1fc7cd9a855b850f5d544424ad6b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java
@@ -38,18 +38,18 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
  * 
  * @author Christian Ribeaud
  */
-public final class NewExternalData implements Serializable
+public class NewExternalData implements Serializable
 {
     private static final long serialVersionUID = IServer.VERSION;
 
     private ExtractableData extractableData = new ExtractableData();
 
     private String shareId;
-    
+
     private String location;
-    
+
     private Long size;
-    
+
     private int speedHint;
 
     private StorageFormat storageFormat;
@@ -73,11 +73,11 @@ public final class NewExternalData implements Serializable
     private String dataStoreCode;
 
     private boolean measured;
-    
+
     private ExperimentIdentifier experimentIdentifierOrNull;
-    
+
     private SampleIdentifier sampleIdentifierOrNull;
-    
+
     public ExperimentIdentifier getExperimentIdentifierOrNull()
     {
         return experimentIdentifierOrNull;