diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java
index 1f307682b7874b807858c85042488cc605287643..abf213c0bac031bcd2b455e56252c38f59bb397a 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java
@@ -98,7 +98,7 @@ public class UpdateSampleProjectExecutor extends AbstractUpdateEntityToOneRelati
             relationshipService.unassignSampleFromProject(context.getSession(), entity);
         } else
         {
-            relationshipService.reassignSampleToProject(context.getSession(), entity, related);
+            relationshipService.assignSampleToProject(context.getSession(), entity, related);
         }
     }
 
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java
index f4cb21cbdeeaa58bf1744f5760c97508f78ea575..42566c8965a7d902b94bf7e63cbb7340b4827b63 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java
@@ -60,13 +60,6 @@ public interface IRelationshipService
             @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample,
             @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project);
 
-    @Transactional(propagation = Propagation.MANDATORY)
-    @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER })
-    @Capability("REASSIGN_SAMPLE_TO_PROJECT")
-    public void reassignSampleToProject(IAuthSession session,
-            @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample,
-            @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project);
-
     @Transactional(propagation = Propagation.MANDATORY)
     @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER })
     @Capability("ASSIGN_PROJECT_TO_SPACE")
@@ -81,6 +74,12 @@ public interface IRelationshipService
             @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample,
             @AuthorizationGuard(guardClass = ExperimentPEPredicate.class) ExperimentPE experiment);
 
+    @Transactional(propagation = Propagation.MANDATORY)
+    @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER })
+    @Capability("UNASSIGN_SAMPLE_FROM_PROJECT")
+    public void checkCanUnassignSampleFromProject(IAuthSession session,
+            @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample);
+
     @Transactional(propagation = Propagation.MANDATORY)
     @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER })
     @Capability("UNASSIGN_SAMPLE_FROM_EXPERIMENT")
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java
index 84a5effaa9ed175d209fa8e478a4df36d643d90d..1992f498e1c4ae23282c14f83dd496ebf0e3e8c4 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java
@@ -97,16 +97,17 @@ public class RelationshipService implements IRelationshipService, ApplicationCon
 
     @Override
     public void assignSampleToProject(IAuthSession session, SamplePE sample, ProjectPE project)
-    {
-        reassignSampleToProject(session, sample, project);
-    }
-
-    @Override public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project)
     {
         if (SamplePE.projectSamplesEnabled)
         {
             Date timeStamp = getTransactionTimeStamp();
             ProjectPE previousProject = sample.getProject();
+
+            if (previousProject != null && !previousProject.equals(project))
+            {
+                service.checkCanUnassignSampleFromProject(session, sample);
+            }
+
             RelationshipUtils.updateModificationDateAndModifier(previousProject, session, timeStamp);
             sample.setProject(project);
             RelationshipUtils.updateModificationDateAndModifier(project, session, timeStamp);
@@ -157,6 +158,12 @@ public class RelationshipService implements IRelationshipService, ApplicationCon
                 session, timeStamp);
     }
 
+    @Override
+    public void checkCanUnassignSampleFromProject(IAuthSession session, SamplePE sample)
+    {
+        // all the logic is done by the authorization mechanism
+    }
+
     @Override
     public void checkCanUnassignSampleFromExperiment(IAuthSession session, SamplePE sample)
     {
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
index 78eb2d9ede901e00d4f7d4f9034ad724db6bda78..55bd2616071c259179279b63c139588f00a7a6d5 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
@@ -879,7 +879,7 @@ abstract class AbstractBusinessObject implements IDAOFactory
     {
         if (project != null)
         {
-            relationshipService.reassignSampleToProject(session, sample, project);
+            relationshipService.assignSampleToProject(session, sample, project);
         } else
         {
             relationshipService.unassignSampleFromProject(session, sample);
diff --git a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java
index 75cf5ae068ddaee04934c7feda4aa67844a64672..861af746a6d176edc1276ba4d066606a5e80a976 100644
--- a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java
+++ b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java
@@ -49,6 +49,10 @@ public class RelationshipServiceStub implements IRelationshipService
     {
     }
 
+    @Override public void checkCanUnassignSampleFromProject(final IAuthSession session, final SamplePE sample)
+    {
+    }
+
     @Override
     public void checkCanUnassignSampleFromExperiment(IAuthSession session, SamplePE sample)
     {
@@ -140,12 +144,6 @@ public class RelationshipServiceStub implements IRelationshipService
 
     }
 
-    @Override
-    public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project)
-    {
-
-    }
-
     @Override
     public void unassignSampleFromProject(IAuthSession session, SamplePE sample)
     {