diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java
index 76d5324e19627e638ec42380f0c7244bfab8f2db..a62d869793d82b092a537aaa655762efc14c9a90 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java
@@ -315,4 +315,53 @@ public class EntityRelationshipChangeTest extends BaseTest
         assertThat(serverSays(child).getParents(), containsExactly(parent1, parent2));
     }
 
+    @Test
+    public void addSampleToContainer()
+    {
+        Sample container = create(aSample().inSpace(space));
+        Sample componentCandidate = create(aSample().inSpace(space));
+        SampleUpdatesDTO updates = create(anUpdateOf(componentCandidate).withContainer(container));
+
+        commonServer.updateSample(session, updates);
+
+        assertThat(serverSays(componentCandidate).getContainer(), is(container));
+    }
+
+    @Test
+    public void removeSampleFromContainer()
+    {
+        Sample container = create(aSample().inSpace(space));
+        Sample component = create(aSample().inSpace(space).inContainer(container));
+        SampleUpdatesDTO updates = create(anUpdateOf(component));
+
+        commonServer.updateSample(session, updates);
+
+        assertThat(serverSays(component).getContainer(), is(nullValue()));
+    }
+
+    @Test
+    public void sampleUpdateWithNewContainerWillChangeContanerOfSample()
+    {
+        Sample container = create(aSample().inSpace(space));
+        Sample component = create(aSample().inSpace(space).inContainer(container));
+        Sample newContainer = create(aSample().inSpace(space));
+        SampleUpdatesDTO updates = create(anUpdateOf(component).withContainer(newContainer));
+
+        commonServer.updateSample(session, updates);
+
+        assertThat(serverSays(component).getContainer(), is(newContainer));
+    }
+
+    @Test(expectedExceptions =
+        { UserFailureException.class })
+    public void sampleCannotBeUpdatedToBeChildOfComponentSample()
+    {
+        Sample container = create(aSample().inSpace(space));
+        Sample component = create(aSample().inSpace(space).inContainer(container));
+        Sample subComponent = create(aSample().inSpace(space));
+        SampleUpdatesDTO updates = create(anUpdateOf(subComponent).withContainer(component));
+
+        commonServer.updateSample(session, updates);
+    }
+
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java
index d2bb61f639d9798fb4221cd90cea613acf56d328..d3446ea5afec18d4d1a78aeeec22ec52efec1a7b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java
@@ -63,6 +63,10 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
 
     private Sample sharedSample;
 
+    private Sample childSample;
+
+    private Sample parentSample;
+
     private DataSet dataSet;
 
     @BeforeClass
@@ -80,6 +84,9 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
         destinationSample = create(aSample().inExperiment(destinationExperiment));
 
         sharedSample = create(aSample());
+
+        parentSample = create(aSample().inSpace(sourceSpace));
+        childSample = create(aSample().inSpace(destinationSpace).withParent(parentSample));
     }
 
     @Test(dataProvider = "rolesAllowedToAssignExperimentToProject")
@@ -231,6 +238,40 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
         assignDataSetToSample(sourceSpaceRole, destinationSpaceRole, instanceRole);
     }
 
+    @Test(dataProvider = "rolesAllowedToAddParentToSample")
+    public void addingParentToSampleIsAuthorizedFor(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        addParentToSample(sourceSpaceRole, destinationSpaceRole, instanceRole);
+    }
+
+    @Test(dataProvider = "rolesNotAllowedToAddParentToSample", expectedExceptions =
+        { AuthorizationFailureException.class })
+    public void addingParentToSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        addParentToSample(sourceSpaceRole, destinationSpaceRole, instanceRole);
+    }
+
+    @Test(dataProvider = "rolesAllowedToRemoveParentFromSample")
+    public void removingParentFromSampleIsAuthorizedFor(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        removeParentFromSample(sourceSpaceRole, destinationSpaceRole, instanceRole);
+    }
+
+    @Test(dataProvider = "rolesNotAllowedToRemoveParentFromSample", expectedExceptions =
+        { AuthorizationFailureException.class })
+    public void removingParentFromSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        removeParentFromSample(sourceSpaceRole, destinationSpaceRole, instanceRole);
+    }
+
     private void assignExperimentToProject(RoleWithHierarchy sourceSpaceRole,
             RoleWithHierarchy destinationSpaceRole,
             RoleWithHierarchy instanceRole)
@@ -339,6 +380,32 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
                 id(destinationSample));
     }
 
+    private void addParentToSample(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        String session =
+                create(aSession().withSpaceRole(sourceSpaceRole, sourceSpace).withSpaceRole(
+                        destinationSpaceRole, destinationSpace).withInstanceRole(instanceRole));
+
+        relationshipService.addParentToSample(sessionManager.getSession(session), id(sourceSample),
+                id(destinationSample));
+
+    }
+
+    private void removeParentFromSample(RoleWithHierarchy sourceSpaceRole,
+            RoleWithHierarchy destinationSpaceRole,
+            RoleWithHierarchy instanceRole)
+    {
+        String session =
+                create(aSession().withSpaceRole(sourceSpaceRole, sourceSpace).withSpaceRole(
+                        destinationSpaceRole, destinationSpace).withInstanceRole(instanceRole));
+
+        relationshipService.removeParentFromSample(sessionManager.getSession(session),
+                id(childSample),
+                id(parentSample));
+    }
+
     @DataProvider(name = "rolesAllowedToAssignExperimentToProject")
     public static RoleWithHierarchy[][] rolesAllowedToAssignExperimentToProject()
     {
@@ -465,6 +532,34 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
                 RoleWithHierarchy.SPACE_POWER_USER));
     }
 
+    @DataProvider(name = "rolesAllowedToAddParentToSample")
+    public static RoleWithHierarchy[][] rolesAllowedToAddParentToSample()
+    {
+        return toNestedArray(acceptedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER,
+                RoleWithHierarchy.SPACE_POWER_USER));
+    }
+
+    @DataProvider(name = "rolesNotAllowedToAddParentToSample")
+    public static RoleWithHierarchy[][] rolesNotAllowedToAddParentToSample()
+    {
+        return toNestedArray(rejectedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER,
+                RoleWithHierarchy.SPACE_POWER_USER));
+    }
+
+    @DataProvider(name = "rolesAllowedRemoveAddParentFromSample")
+    public static RoleWithHierarchy[][] rolesAllowedToRemoveParentFromSample()
+    {
+        return toNestedArray(acceptedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER,
+                RoleWithHierarchy.SPACE_POWER_USER));
+    }
+
+    @DataProvider(name = "rolesNotAllowedToRemoveParentFromSample")
+    public static RoleWithHierarchy[][] rolesNotAllowedToRemoveParentFromSample()
+    {
+        return toNestedArray(rejectedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER,
+                RoleWithHierarchy.SPACE_POWER_USER));
+    }
+
     public static Collection<RoleWithHierarchy> allInstanceRoles = new HashSet<RoleWithHierarchy>();
 
     public static Collection<RoleWithHierarchy> allSpaceRoles = new HashSet<RoleWithHierarchy>();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
index f026ace361aa41008ef69b4d5713739a9559c050..84f66c0dc831d2714b6caa94e5c9dcf092ba0981 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java
@@ -27,12 +27,14 @@ import java.util.List;
 import javax.servlet.http.HttpSession;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.support.GenericApplicationContext;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
 import org.springframework.test.context.transaction.TransactionConfiguration;
 import org.testng.AssertJUnit;
+import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeSuite;
 
@@ -93,6 +95,13 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo
         TestInitializer.init();
     }
 
+    @AfterTest()
+    public void testingThis()
+    {
+        System.out.println("!!!!!!!! AFTER TEST RUN - DESTROYING - IN SYSTEMTESTCASE!!!");
+        ((GenericApplicationContext) applicationContext).destroy();
+    }
+
     @BeforeClass
     public void loginAsSystem()
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java
index 321f7cf96234c205760c39087c506b7be77f3feb..2aebd20615f2a8e2c24fa81b07df3672b7f16a60 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java
@@ -43,10 +43,13 @@ public class SampleBuilder extends Builder<Sample>
 
     private List<Sample> parents;
 
+    private Sample container;
+
     public SampleBuilder(ICommonServerForInternalUse commonServer, IGenericServer genericServer)
     {
         super(commonServer, genericServer);
         this.parents = new ArrayList<Sample>();
+        this.container = null;
     }
 
     @SuppressWarnings("hiding")
@@ -63,6 +66,12 @@ public class SampleBuilder extends Builder<Sample>
         return this;
     }
 
+    public SampleBuilder inContainer(Sample sample)
+    {
+        this.container = sample;
+        return this;
+    }
+
     public SampleBuilder withParent(Sample parent)
     {
         return this.withParents(parent);
@@ -116,8 +125,8 @@ public class SampleBuilder extends Builder<Sample>
         NewSample data = new NewSample();
         data.setIdentifier(identifier);
         data.setAttachments(new ArrayList<NewAttachment>());
-        data.setContainerIdentifier(null);
-        data.setCurrentContainerIdentifier(null);
+        data.setContainerIdentifier(this.container != null ? this.container.getIdentifier() : null);
+        // data.setCurrentContainerIdentifier(null);
         if (this.experiment != null)
         {
             data.setExperimentIdentifier(this.experiment.getIdentifier());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java
index 2b50827456ab0bed0c13ed3b17081a784e28bfee..1daa3ed1cf267e0b7b4711afb868ea83cd56340c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java
@@ -50,6 +50,8 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO>
 
     private List<Sample> parents;
 
+    private Sample container;
+
     public SampleUpdateBuilder(ICommonServerForInternalUse commonServer,
             IGenericServer genericServer, Sample sample)
     {
@@ -63,6 +65,7 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO>
         this.version = sample.getModificationDate();
         this.sampleIdentifier = id(sample);
         this.parents = new ArrayList<Sample>();
+        this.container = null;
     }
 
     public SampleUpdateBuilder inExperiment(Experiment experiment)
@@ -109,6 +112,12 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO>
         return this;
     }
 
+    public SampleUpdateBuilder withContainer(Sample sample)
+    {
+        this.container = sample;
+        return this;
+    }
+
     /*
      *     public SampleUpdatesDTO(TechId sampleId, List<IEntityProperty> properties,
             ExperimentIdentifier experimentIdentifierOrNull, Collection<NewAttachment> attachments,
@@ -126,6 +135,7 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO>
         }
         return new SampleUpdatesDTO(this.sampleId, new ArrayList<IEntityProperty>(),
                 this.experimentId, new ArrayList<NewAttachment>(), this.version,
-                this.sampleIdentifier, null, parentCodes);
+                this.sampleIdentifier, this.container != null ? this.container.getIdentifier()
+                        : null, parentCodes);
     }
 }
\ No newline at end of file