diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
index 65bf51f0289f5fca5da89ea01b831021b43b1cd5..4a9082ac2251f07e726e534847e95ee84e8e0646 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
@@ -24,8 +24,10 @@ import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessE
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.authorization.AuthorizationServiceUtils;
+import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
+import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.DataPEPredicate;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.DataSetPEByExperimentOrSampleIdentifierValidator;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
@@ -119,12 +121,7 @@ public class DataSetAuthorizationExecutor implements IDataSetAuthorizationExecut
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.DATA_SET, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_POWER_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_DATASET")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
-    public void canDelete(IOperationContext context, IDataSetId id, DataPE dataSet)
+    public void canDelete(IOperationContext context, IDataSetId id, @AuthorizationGuard(guardClass = DataPEPredicate.class) DataPE dataSet)
     {
         canUpdate(context, id, dataSet);
     }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DeleteDataSetExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DeleteDataSetExecutor.java
index 32f490e7112d37eabf2f6195ac6d3225b941804a..393adbde0cd2ac3c5bd80a4676313c651937e96f 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DeleteDataSetExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DeleteDataSetExecutor.java
@@ -58,12 +58,6 @@ public class DeleteDataSetExecutor extends AbstractDeleteEntityExecutor<IDeletio
         return mapDataSetByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IDataSetId entityId, DataPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/IDataSetAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/IDataSetAuthorizationExecutor.java
index db367559a66b78ff2889e0cd66c5b6f8f5629742..2d64541b61cde75dd2ab1e71dde72fc3a228ce8c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/IDataSetAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/IDataSetAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface IDataSetAuthorizationExecutor extends IObjectAuthorizationExecu
 
     void canUpdate(IOperationContext context, IDataSetId id, DataPE dataSet);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, IDataSetId id, DataPE dataSet);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractDeleteEntityExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractDeleteEntityExecutor.java
index 0bd8575c16aeaa89b28103f1624283b844f0dd86..9726d45f61387dd5d1c2371c3b7c9d1f10e2c617 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractDeleteEntityExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/entity/AbstractDeleteEntityExecutor.java
@@ -50,8 +50,6 @@ public abstract class AbstractDeleteEntityExecutor<DELETION_ID, ENTITY_ID, ENTIT
     @Override
     public DELETION_ID delete(IOperationContext context, List<? extends ENTITY_ID> entityIds, DELETION_OPTIONS deletionOptions)
     {
-        checkAccess(context);
-
         if (context == null)
         {
             throw new IllegalArgumentException("Context cannot be null");
@@ -100,7 +98,7 @@ public abstract class AbstractDeleteEntityExecutor<DELETION_ID, ENTITY_ID, ENTIT
 
     protected abstract Map<ENTITY_ID, ENTITY_PE> map(IOperationContext context, List<? extends ENTITY_ID> entityIds);
 
-    protected abstract void checkAccess(IOperationContext context);
+    // protected abstract void checkAccess(IOperationContext context);
 
     protected abstract void checkAccess(IOperationContext context, ENTITY_ID entityId, ENTITY_PE entity);
 
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/DeleteExperimentExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/DeleteExperimentExecutor.java
index b863d0764928fd4f9ce0897434efe81a9f13c136..50c63af068121c28efa3785119e2246db0db0eca 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/DeleteExperimentExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/DeleteExperimentExecutor.java
@@ -56,12 +56,6 @@ public class DeleteExperimentExecutor extends AbstractDeleteEntityExecutor<IDele
         return mapExperimentByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IExperimentId entityId, ExperimentPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/ExperimentAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/ExperimentAuthorizationExecutor.java
index 09e38aa2e642ee488eb1bacb720123d9ec70b449..6b5ecd399553d88a8c6dd92cdcb4f92ef73d6744 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/ExperimentAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/ExperimentAuthorizationExecutor.java
@@ -22,13 +22,15 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifi
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
+import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
+import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.ExperimentPEPredicate;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ExperimentByIdentiferValidator;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 
 /**
@@ -76,12 +78,8 @@ public class ExperimentAuthorizationExecutor implements IExperimentAuthorization
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.EXPERIMENT, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_POWER_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_EXPERIMENT")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
-    public void canDelete(IOperationContext context, IExperimentId id, ExperimentPE experiment)
+    public void canDelete(IOperationContext context, IExperimentId id,
+            @AuthorizationGuard(guardClass = ExperimentPEPredicate.class) ExperimentPE experiment)
     {
         if (false == new ExperimentByIdentiferValidator().doValidation(context.getSession().tryGetPerson(), experiment))
         {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/IExperimentAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/IExperimentAuthorizationExecutor.java
index 1f98851190ecd43b21a09f72ccc87f290cf91fe6..cbe61d85ebcde6e2ce575894cc13f03cfa717de8 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/IExperimentAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/experiment/IExperimentAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface IExperimentAuthorizationExecutor extends IObjectAuthorizationEx
 
     void canUpdate(IOperationContext context, IExperimentId id, ExperimentPE experiment);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, IExperimentId id, ExperimentPE experiment);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/DeleteMaterialExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/DeleteMaterialExecutor.java
index 0afe979714441f253fbc1670e76fc93cc1d70b57..fe937c88dada4be0ac275101b9aeec68d8ff49ea 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/DeleteMaterialExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/DeleteMaterialExecutor.java
@@ -51,12 +51,6 @@ public class DeleteMaterialExecutor extends AbstractDeleteEntityExecutor<Void, I
         return mapMaterialByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IMaterialId entityId, MaterialPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/IMaterialAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/IMaterialAuthorizationExecutor.java
index d280e826f9f3ad7e2cd7def4fdd1574c6ac90a1a..05f58105b657eddc1149bbb09d6091535e27b617 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/IMaterialAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/IMaterialAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface IMaterialAuthorizationExecutor extends IObjectAuthorizationExec
 
     void canUpdate(IOperationContext context, IMaterialId id, MaterialPE material);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, IMaterialId id, MaterialPE material);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/MaterialAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/MaterialAuthorizationExecutor.java
index 9ea76d0e504bd37ad2fce181eb309bb90f5ead52..41d8c6321b433e5011a3bc1a3fb0bc7cbf5ae1a7 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/MaterialAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/material/MaterialAuthorizationExecutor.java
@@ -24,8 +24,8 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capabili
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 
 /**
@@ -67,11 +67,6 @@ public class MaterialAuthorizationExecutor implements IMaterialAuthorizationExec
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.MATERIAL, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.INSTANCE_ADMIN, RoleWithHierarchy.INSTANCE_ETL_SERVER })
     @Capability("DELETE_MATERIAL")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
     public void canDelete(IOperationContext context, IMaterialId id, MaterialPE material)
     {
         // nothing to do
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/delete/DeleteOperationExecutionExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/delete/DeleteOperationExecutionExecutor.java
index 381c3bc8b6a5753333ddeb5630a3b2b00d4524df..a8979a81d0616c53026513624a09e3186fdf018b 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/delete/DeleteOperationExecutionExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/delete/DeleteOperationExecutionExecutor.java
@@ -72,12 +72,6 @@ public class DeleteOperationExecutionExecutor
         return map;
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IOperationExecutionId entityId, OperationExecutionPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/DeleteProjectExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/DeleteProjectExecutor.java
index 78d495fa5b22a6cfbd64df5195e34b507d23d9d4..a16885111d6a5d90e3d899238fa30d4874fc684a 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/DeleteProjectExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/DeleteProjectExecutor.java
@@ -51,12 +51,6 @@ public class DeleteProjectExecutor extends AbstractDeleteEntityExecutor<Void, IP
         return mapProjectByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IProjectId entityId, ProjectPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/IProjectAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/IProjectAuthorizationExecutor.java
index ab730c7187941a32a11a5ee7be91e240497c80f9..bce2850db73895b699b31b0e81eeef2b8ece273d 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/IProjectAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/IProjectAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface IProjectAuthorizationExecutor extends IObjectAuthorizationExecu
 
     void canUpdate(IOperationContext context, IProjectId id, ProjectPE project);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, IProjectId id, ProjectPE project);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/ProjectAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/ProjectAuthorizationExecutor.java
index cd3397d31aeecfab189fa6d9f220acbc8dc9a0a4..0c78126c9ea70e710b813a09027664b0223568c1 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/ProjectAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/project/ProjectAuthorizationExecutor.java
@@ -22,14 +22,16 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.IProjectId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
+import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
+import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.ProjectPEPredicate;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.ProjectByIdentiferValidator;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 
 /**
  * @author pkupczyk
@@ -76,12 +78,7 @@ public class ProjectAuthorizationExecutor implements IProjectAuthorizationExecut
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.PROJECT, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_POWER_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_PROJECT")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
-    public void canDelete(IOperationContext context, IProjectId id, ProjectPE project)
+    public void canDelete(IOperationContext context, IProjectId id, @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project)
     {
         if (false == new ProjectByIdentiferValidator().doValidation(context.getSession().tryGetPerson(), project))
         {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/DeleteSampleExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/DeleteSampleExecutor.java
index 74ac1063c1d7cd311a6e78f97886d55ec2f51ced..88a51631a54b1b6843ed758e1e92003180690140 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/DeleteSampleExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/DeleteSampleExecutor.java
@@ -31,6 +31,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOpti
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractDeleteEntityExecutor;
+import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard;
+import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.SamplePredicate;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.ITrashBO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
@@ -60,12 +62,6 @@ public class DeleteSampleExecutor extends AbstractDeleteEntityExecutor<IDeletion
         return mapSampleByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, ISampleId entityId, SamplePE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISampleAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISampleAuthorizationExecutor.java
index d72093138b4e4526f9c717f04ab811ee93c48231..1dd0db0948b42721c5dc72030bac96e24f70ac37 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISampleAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISampleAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface ISampleAuthorizationExecutor extends IObjectAuthorizationExecut
 
     void canUpdate(IOperationContext context, ISampleId id, SamplePE sample);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, ISampleId id, SamplePE sample);
 
     void canSearch(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SampleAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SampleAuthorizationExecutor.java
index 5851a40014e4cd7471105626ef465b160bfaf1fd..917f4166f6bf074f6d08997fb4d07dfbfc87f40a 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SampleAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SampleAuthorizationExecutor.java
@@ -22,14 +22,16 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
+import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.AuthorizationGuard;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Capability;
 import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
+import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.SamplePEPredicate;
 import ch.systemsx.cisd.openbis.generic.server.authorization.validator.SampleByIdentiferValidator;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 
 /**
  * @author pkupczyk
@@ -76,13 +78,10 @@ public class SampleAuthorizationExecutor implements ISampleAuthorizationExecutor
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.SAMPLE, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_POWER_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_SAMPLE")
-    public void canDelete(IOperationContext context)
+    public void canDelete(IOperationContext context, ISampleId id,
+            @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample)
     {
-    }
 
-    @Override
-    public void canDelete(IOperationContext context, ISampleId id, SamplePE sample)
-    {
         if (false == new SampleByIdentiferValidator().doValidation(context.getSession().tryGetPerson(), sample))
         {
             throw new UnauthorizedObjectAccessException(id);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/DeleteSpaceExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/DeleteSpaceExecutor.java
index 587c14fd3da5f9cc3c4351d972a11d878bf57f90..7a3b9232a5068f9e203c659a179ab1b6db6755d2 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/DeleteSpaceExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/DeleteSpaceExecutor.java
@@ -50,12 +50,6 @@ public class DeleteSpaceExecutor extends AbstractDeleteEntityExecutor<Void, ISpa
         return mapSpaceByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, ISpaceId entityId, SpacePE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/ISpaceAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/ISpaceAuthorizationExecutor.java
index 99854e526351627dee7baccb3c2855857a52fb17..ce10c8846b27003f9c59c0ad09e47082dc832510 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/ISpaceAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/ISpaceAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface ISpaceAuthorizationExecutor extends IObjectAuthorizationExecuto
 
     void canUpdate(IOperationContext context, ISpaceId id, SpacePE space);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, ISpaceId id, SpacePE space);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/SpaceAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/SpaceAuthorizationExecutor.java
index 8f3d232132f0ce2a17833c81dcd0d1a78265f88f..2fd28ffd81cce7e6219ab0ec23621ddb68168e98 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/SpaceAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/space/SpaceAuthorizationExecutor.java
@@ -72,11 +72,6 @@ public class SpaceAuthorizationExecutor implements ISpaceAuthorizationExecutor
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.SPACE, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_ADMIN, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_SPACE")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
     public void canDelete(IOperationContext context, ISpaceId id, SpacePE space)
     {
         if (false == new SimpleSpaceValidator().doValidation(context.getSession().tryGetPerson(), space))
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java
index dd734f6f23ae143304672cc89d6d5c172341cfe2..7bcb848c733c49620c61fe16b68d5635369dcafc 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/DeleteTagExecutor.java
@@ -64,12 +64,6 @@ public class DeleteTagExecutor extends AbstractDeleteEntityExecutor<Void, ITagId
         return mapTagByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, ITagId entityId, MetaprojectPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/ITagAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/ITagAuthorizationExecutor.java
index b86e3a5c0df1ac5be562e014be57bdab59d64a43..984d1f0a94d1f944e53cbd22a96ca9c0e081da15 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/ITagAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/ITagAuthorizationExecutor.java
@@ -35,8 +35,6 @@ public interface ITagAuthorizationExecutor extends IObjectAuthorizationExecutor
 
     void canUpdate(IOperationContext context, ITagId id, MetaprojectPE tag);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, ITagId id, MetaprojectPE tag);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/TagAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/TagAuthorizationExecutor.java
index d3be29ffcd601bacee0800d5492f1c893a0b576c..66d917bbc0a9344cb6e659e1b30e95e52fd9df79 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/TagAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/tag/TagAuthorizationExecutor.java
@@ -72,11 +72,6 @@ public class TagAuthorizationExecutor implements ITagAuthorizationExecutor
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.METAPROJECT, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_TAG")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
     public void canDelete(IOperationContext context, ITagId id, MetaprojectPE tag)
     {
         new TagAuthorization(context).checkAccess(tag);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/DeleteVocabularyTermExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/DeleteVocabularyTermExecutor.java
index 258d937fb5e450be9b5d1286b2aa3d5e56b21f20..0dbd9f76899633f0cdf17059120bc5c7a74adb2d 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/DeleteVocabularyTermExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/DeleteVocabularyTermExecutor.java
@@ -60,12 +60,6 @@ public class DeleteVocabularyTermExecutor
         return mapTermByIdExecutor.map(context, entityIds);
     }
 
-    @Override
-    protected void checkAccess(IOperationContext context)
-    {
-        authorizationExecutor.canDelete(context);
-    }
-
     @Override
     protected void checkAccess(IOperationContext context, IVocabularyTermId entityId, VocabularyTermPE entity)
     {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/IVocabularyTermAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/IVocabularyTermAuthorizationExecutor.java
index f05d60ebecf2f578ca4630d8002a22cde87b626e..8cb3e70830f84f90a3a23b829c5e5aec8699679c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/IVocabularyTermAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/IVocabularyTermAuthorizationExecutor.java
@@ -41,8 +41,6 @@ public interface IVocabularyTermAuthorizationExecutor extends IObjectAuthorizati
 
     boolean canUpdateInternallyManaged(IOperationContext context);
 
-    void canDelete(IOperationContext context);
-
     void canDelete(IOperationContext context, IVocabularyTermId id, VocabularyTermPE term);
 
     void canGet(IOperationContext context);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/VocabularyTermAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/VocabularyTermAuthorizationExecutor.java
index 0c82574008f196b56f990d3d04734c947705717c..19e4d616037db8f309052feab350ffc78314585b 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/VocabularyTermAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/vocabulary/VocabularyTermAuthorizationExecutor.java
@@ -27,10 +27,10 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAll
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseCreateOrDeleteModification;
 import ch.systemsx.cisd.openbis.generic.shared.DatabaseUpdateModification;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 
 /**
  * @author pkupczyk
@@ -99,15 +99,11 @@ public class VocabularyTermAuthorizationExecutor implements IVocabularyTermAutho
         return false;
     }
 
+
     @Override
     @DatabaseCreateOrDeleteModification(value = { ObjectKind.VOCABULARY_TERM, ObjectKind.DELETION })
     @RolesAllowed({ RoleWithHierarchy.SPACE_POWER_USER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("DELETE_VOCABULARY_TERM")
-    public void canDelete(IOperationContext context)
-    {
-    }
-
-    @Override
     public void canDelete(IOperationContext context, IVocabularyTermId id, VocabularyTermPE term)
     {
         // nothing to do
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
index a2ef92d49a25fe4315642e464fc987c2f977223f..146c6a70675060b430d2c228135b6871bdaa7412 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
@@ -19,13 +19,14 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3;
 import java.util.ArrayList;
 import java.util.Collections;
 
+import junit.framework.Assert;
+
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.delete.DataSetDeletionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId;
-
-import junit.framework.Assert;
+import ch.systemsx.cisd.common.action.IDelegatedAction;
 
 /**
  * @author pkupczyk
@@ -117,6 +118,26 @@ public class DeleteDataSetTest extends AbstractDeletionTest
         assertDataSetDoesNotExist(component1);
         assertDataSetExists(component2);
     }
+
+    @Test
+    public void testDeleteDSWithPowerUserInAnotherSpace()
+    {
+        final DataSetPermId permId = new DataSetPermId("20120619092259000-22");
+
+        assertAuthorizationFailureException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_POWER_USER_CISD, PASSWORD);
+
+                    DataSetDeletionOptions options = new DataSetDeletionOptions();
+                    options.setReason("It is just a test");
+
+                    v3api.deleteDataSets(sessionToken, Collections.singletonList(permId), options);
+                }
+            });
+    }
     // waiting for better times
     // @Test
     // public void testDeleteContainerInDifferentExperiment()
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
index 57b62b3d16145ef2ec8b87db611c5f7540b8f941..c69c2b6dd829d6209398ad2b5231e1f79abbc90d 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
@@ -23,6 +23,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import junit.framework.Assert;
+
 import org.springframework.test.context.transaction.TestTransaction;
 import org.testng.annotations.Test;
 
@@ -36,8 +38,6 @@ import ch.ethz.sis.openbis.systemtest.asapi.v3.index.RemoveFromIndexState;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 
-import junit.framework.Assert;
-
 /**
  * @author pkupczyk
  */
@@ -150,7 +150,7 @@ public class DeleteExperimentTest extends AbstractDeletionTest
     {
         final ExperimentPermId permId = createCisdExperiment();
 
-        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+        assertAuthorizationFailureException(new IDelegatedAction()
             {
                 @Override
                 public void execute()
@@ -162,7 +162,27 @@ public class DeleteExperimentTest extends AbstractDeletionTest
 
                     v3api.deleteExperiments(sessionToken, Collections.singletonList(permId), options);
                 }
-            }, permId);
+            });
+    }
+
+    @Test
+    public void testDeleteExperimentWithPowerUserInAnotherSpace()
+    {
+        final ExperimentPermId permId = new ExperimentPermId("200902091255058-1037");
+
+        assertAuthorizationFailureException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_POWER_USER_CISD, PASSWORD);
+
+                    ExperimentDeletionOptions options = new ExperimentDeletionOptions();
+                    options.setReason("It is just a test");
+
+                    v3api.deleteExperiments(sessionToken, Collections.singletonList(permId), options);
+                }
+            });
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
index 715f4d779ffde4a2f1613324c5cf8cc3571cf3cb..24e657c8ab03bba1e2e17a552adf7642dbfd5a1b 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
@@ -88,7 +88,7 @@ public class DeleteProjectTest extends AbstractDeletionTest
     {
         final ProjectPermId permId = createCisdProject();
 
-        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+        assertAuthorizationFailureException(new IDelegatedAction()
             {
                 @Override
                 public void execute()
@@ -100,7 +100,26 @@ public class DeleteProjectTest extends AbstractDeletionTest
 
                     v3api.deleteProjects(sessionToken, Collections.singletonList(permId), options);
                 }
-            }, permId);
+            });
     }
 
+    @Test
+    public void testDeleteProjectWithPowerUserInAnotherSpace()
+    {
+        final ProjectPermId permId = new ProjectPermId("20120814110011738-105");
+
+        assertAuthorizationFailureException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_POWER_USER_CISD, PASSWORD);
+
+                    ProjectDeletionOptions options = new ProjectDeletionOptions();
+                    options.setReason("It is just a test");
+
+                    v3api.deleteProjects(sessionToken, Collections.singletonList(permId), options);
+                }
+            });
+    }
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
index f8fb6e04587aec61e1632701aa8bd07dd51fe861..80e7c4277230aa4f5d4fc6fd795c4e97c8624600 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
@@ -23,6 +23,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import junit.framework.Assert;
+
 import org.springframework.test.context.transaction.TestTransaction;
 import org.testng.annotations.Test;
 
@@ -37,8 +39,6 @@ import ch.ethz.sis.openbis.systemtest.asapi.v3.index.RemoveFromIndexState;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 
-import junit.framework.Assert;
-
 /**
  * @author pkupczyk
  */
@@ -57,6 +57,26 @@ public class DeleteSampleTest extends AbstractDeletionTest
         Assert.assertNull(deletionId);
     }
 
+    @Test
+    public void testDeleteSampleWithPowerUserInAnotherSpace()
+    {
+        final SamplePermId permId = new SamplePermId("200902091250077-1060");
+
+        assertAuthorizationFailureException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_POWER_USER_CISD, PASSWORD);
+
+                    SampleDeletionOptions options = new SampleDeletionOptions();
+                    options.setReason("It is just a test");
+
+                    v3api.deleteSamples(sessionToken, Collections.singletonList(permId), options);
+                }
+            });
+    }
+
     @Test
     public void testDeleteWithIndexCheck() throws Exception
     {
@@ -164,7 +184,7 @@ public class DeleteSampleTest extends AbstractDeletionTest
     {
         final SamplePermId permId = createCisdSample(null);
 
-        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+        assertAuthorizationFailureException(new IDelegatedAction()
             {
                 @Override
                 public void execute()
@@ -176,7 +196,7 @@ public class DeleteSampleTest extends AbstractDeletionTest
 
                     v3api.deleteSamples(sessionToken, Collections.singletonList(permId), options);
                 }
-            }, permId);
+            });
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
index 11bb12ad8cc0d8bf65b26f5cbd658e0fa2f127dd..fba74040933fd27cf9459af2875ac0eabacd2700 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
@@ -148,7 +148,7 @@ public class UpdateDataSetTest extends AbstractSampleTest
         assertEquals(result.getExperiment().getCode(), "EXP-SPACE-TEST");
     }
 
-    @Test(expectedExceptions = { UserFailureException.class }, expectedExceptionsMessageRegExp = "(?s).*Access denied.*")
+    @Test(expectedExceptions = { UserFailureException.class }, expectedExceptionsMessageRegExp = "(?s).*Authorization failure.*")
     public void testUpdateWithSampleNotAllowed()
     {
         String sessionToken = v3api.login(TEST_POWER_USER_CISD, PASSWORD);
diff --git a/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv b/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
index 875f6e01affebb6d32005b161e11aef95acde9ec..3855f5d2b3e12c26047f5e33600cde220d485633 100644
--- a/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
+++ b/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
@@ -7,3 +7,4 @@
 7	ETL_SERVER	\N	4	2	2008-11-05 09:18:11.471+01	\N
 8	POWER_USER	1	6	2	2008-11-05 09:18:11.471+01	\N
 9	ADMIN	3	7	2	2008-11-05 09:18:11.471+01	\N
+10	OBSERVER	3	6	2	2008-11-05 09:18:11.471+01	\N