diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AbstractAssignmentSampleToExperimentTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AbstractAssignmentSampleToExperimentTestCase.java
index e56936743cbcd00b9dc6efa27669436860c399a6..9f83e1409d16584a76e54ff57f55dbe69bef29b5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AbstractAssignmentSampleToExperimentTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AbstractAssignmentSampleToExperimentTestCase.java
@@ -39,6 +39,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleC
 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.identifier.ExperimentIdentifierFactory;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.systemtest.base.BaseTest;
 import ch.systemsx.cisd.openbis.systemtest.base.auth.AuthorizationRule;
 import ch.systemsx.cisd.openbis.systemtest.base.auth.GuardedDomain;
@@ -182,12 +184,6 @@ public abstract class AbstractAssignmentSampleToExperimentTestCase extends BaseT
     abstract protected void reassignSampleToExperiment(String samplePermId, String experimentIdentifierOrNull, 
             String userSessionToken);
     
-    /**
-     * Registers a new experiment for the specified project with the specified existing samples. 
-     */
-    abstract protected String registerExperimentWithSamples(String projectIdentifier, List<String> samplePermIds,
-            String userSessionToken);
-
     @Test
     public void unassignSampleWithDataSetsFromExperiment()
     {
@@ -605,7 +601,27 @@ public abstract class AbstractAssignmentSampleToExperimentTestCase extends BaseT
     {
         checkAssigningSamplesToExperiment(destinationSpaceRole, instanceRole);
     }
-
+    
+    protected Sample[] loadSamples(List<String> samplePermIds)
+    {
+        List<Sample> samples = new ArrayList<Sample>();
+        for (String permId : samplePermIds)
+        {
+            SampleIdentifier sampleIdentifier = etlService.tryGetSampleIdentifier(systemSessionToken, permId);
+            if (sampleIdentifier == null)
+            {
+                throw new IllegalArgumentException("Unknown sample with perm id: " + permId);
+            }
+            Sample sample = etlService.tryGetSampleWithExperiment(systemSessionToken, sampleIdentifier);
+            if (sample == null)
+            {
+                throw new IllegalArgumentException("Unknown sample with identifier: " + sampleIdentifier);
+            }
+            samples.add(sample);
+        }
+        return samples.toArray(new Sample[0]);
+    }
+    
     private void checkAssigningSampleToExperiment(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole,
             RoleWithHierarchy instanceRole)
     {
@@ -656,8 +672,12 @@ public abstract class AbstractAssignmentSampleToExperimentTestCase extends BaseT
     {
         List<String> samplePermIds = getSamplePermIds(sampleNodes);
         String user = create(aSession().withInstanceRole(RoleCode.ADMIN));
-        String experimentIdentifier 
-                = registerExperimentWithSamples(entityGraphManager.getIdentifierOfDefaultProject(), samplePermIds, user);
+        String projectIdentifier = entityGraphManager.getIdentifierOfDefaultProject();
+        Sample[] samples = loadSamples(samplePermIds);
+        Project project = commonServer.getProjectInfo(systemSessionToken, ProjectIdentifierFactory.parse(projectIdentifier));
+        Experiment experiment = create(anExperiment().inProject(project).withSamples(samples).as(user));
+        String experimentIdentifier = experiment.getIdentifier();
+
         addToRepository(experimentNode, etlService.tryGetExperiment(systemSessionToken, 
                 ExperimentIdentifierFactory.parse(experimentIdentifier)));
     }
@@ -671,5 +691,5 @@ public abstract class AbstractAssignmentSampleToExperimentTestCase extends BaseT
         }
         return samplePermIds;
     }
-    
+
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentTest.java
index 651dc451fa6cea814970810d9a875aa00232f4f1..d55e146d61582144aa5b2fa8e69d3148a225aff1 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentTest.java
@@ -16,16 +16,13 @@
 
 package ch.systemsx.cisd.openbis.systemtest;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
-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.dto.identifier.ExperimentIdentifierFactory;
-import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 
 /**
@@ -60,35 +57,4 @@ public class AssignSampleToExperimentTest extends AbstractAssignmentSampleToExpe
             perform(anUpdateOf(sample).removingExperiment().as(userSessionToken));
         }
     }
-    
-    @Override
-    protected String registerExperimentWithSamples(String projectIdentifier, List<String> samplePermIds,
-            String userSessionToken)
-    {
-        Sample[] samples = loadSamples(samplePermIds);
-        Project project = commonServer.getProjectInfo(systemSessionToken, ProjectIdentifierFactory.parse(projectIdentifier));
-        Experiment experiment = create(anExperiment().inProject(project).withSamples(samples).as(userSessionToken));
-        return experiment.getIdentifier();
-    }
-    
-    private Sample[] loadSamples(List<String> samplePermIds)
-    {
-        List<Sample> samples = new ArrayList<Sample>();
-        for (String permId : samplePermIds)
-        {
-            SampleIdentifier sampleIdentifier = etlService.tryGetSampleIdentifier(systemSessionToken, permId);
-            if (sampleIdentifier == null)
-            {
-                throw new IllegalArgumentException("Unknown sample with perm id: " + permId);
-            }
-            Sample sample = etlService.tryGetSampleWithExperiment(systemSessionToken, sampleIdentifier);
-            if (sample == null)
-            {
-                throw new IllegalArgumentException("Unknown sample with identifier: " + sampleIdentifier);
-            }
-            samples.add(sample);
-        }
-        return samples.toArray(new Sample[0]);
-    }
-
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentViaDropBoxAPITest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentViaDropBoxAPITest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5112deef99eaeb12bd05920fec0195f1c3d68892
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/AssignSampleToExperimentViaDropBoxAPITest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2012 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.systemtest;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.builders.AtomicEntityOperationDetailsBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
+
+/**
+ * @author Franz-Josef Elmer
+ */
+@Test(groups = { "system-cleandb" })
+public class AssignSampleToExperimentViaDropBoxAPITest extends AbstractAssignmentSampleToExperimentTestCase
+{
+    @Override
+    protected void reassignSamplesToExperiment(String experimentIdentifier, List<String> samplePermIds, 
+            String userSessionToken)
+    {
+        ExperimentIdentifier identifier = ExperimentIdentifierFactory.parse(experimentIdentifier);
+        Experiment experiment = etlService.tryGetExperiment(systemSessionToken, identifier);
+        ExperimentUpdatesDTO experimentUpdate = new ExperimentUpdatesDTO();
+        experimentUpdate.setExperimentId(new TechId(experiment));
+        experimentUpdate.setProjectIdentifier(identifier);
+        experimentUpdate.setVersion(experiment.getVersion());
+        experimentUpdate.setProperties(Collections.<IEntityProperty>emptyList());
+        experimentUpdate.setAttachments(Collections.<NewAttachment>emptyList());
+        Sample[] samples = loadSamples(samplePermIds);
+        experimentUpdate.setSampleCodes(Code.extractCodesToArray(Arrays.asList(samples)));
+        AtomicEntityOperationDetailsBuilder builder = new AtomicEntityOperationDetailsBuilder();
+        etlService.performEntityOperations(userSessionToken, builder.experimentUpdate(experimentUpdate).getDetails());
+    }
+    
+    @Override
+    protected void reassignSampleToExperiment(String samplePermId, String experimentIdentifierOrNull, 
+            String userSessionToken)
+    {
+        SampleIdentifier sampleIdentifier = etlService.tryGetSampleIdentifier(systemSessionToken, samplePermId);
+        Sample sample = etlService.tryGetSampleWithExperiment(systemSessionToken, sampleIdentifier);
+        ExperimentIdentifier experimentIdentifier = null;
+        if (experimentIdentifierOrNull != null)
+        {
+            experimentIdentifier = ExperimentIdentifierFactory.parse(experimentIdentifierOrNull);
+            sampleIdentifier = new SampleIdentifier(experimentIdentifier, sampleIdentifier.getSampleCode());
+        }
+        AtomicEntityOperationDetailsBuilder builder = new AtomicEntityOperationDetailsBuilder();
+        String containerIdentifier = null;
+        if (sample.getContainer() != null)
+        {
+            containerIdentifier = sample.getContainer().getIdentifier();
+        }
+        builder.sampleUpdate(new SampleUpdatesDTO(new TechId(sample), Collections.<IEntityProperty> emptyList(),
+                experimentIdentifier, Collections.<NewAttachment> emptyList(), sample.getVersion(),
+                sampleIdentifier, containerIdentifier, null));
+        etlService.performEntityOperations(userSessionToken, builder.getDetails());
+    }
+    
+}