diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java
index f99f12df9d9f966388e69f6168449cb6ed5ef5d4..f6a0a4a01819d3c5553adb6f3273589aa6694eb4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonBusinessObjectFactory.java
@@ -120,33 +120,37 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
     @Override
     public final IAttachmentBO createAttachmentBO(final Session session)
     {
-        return new AttachmentBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new AttachmentBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final ISpaceBO createSpaceBO(final Session session)
     {
-        return new SpaceBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new SpaceBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IScriptBO createScriptBO(final Session session)
     {
-        return new ScriptBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), jythonEvaluatorPool);
+        return new ScriptBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker, jythonEvaluatorPool);
     }
 
     @Override
     public final IRoleAssignmentTable createRoleAssignmentTable(final Session session)
     {
         return new RoleAssignmentTable(getDaoFactory(), session,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final ISampleTable createSampleTable(final Session session)
     {
         return new SampleTable(getDaoFactory(), session, getRelationshipService(),
-                getEntityOperationChecker(), getManagedPropertyEvaluatorFactory());
+                getEntityOperationChecker(), getManagedPropertyEvaluatorFactory(),
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
@@ -186,7 +190,8 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
     public final ISampleBO createSampleBO(final Session session)
     {
         return new SampleBO(getDaoFactory(), session, getRelationshipService(),
-                getEntityOperationChecker(), getManagedPropertyEvaluatorFactory());
+                getEntityOperationChecker(), getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
@@ -210,7 +215,7 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
     public ISearchDomainSearcher createSearchDomainSearcher(Session session)
     {
         return new SearchDomainSearcher(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
-                getDSSFactory());
+                dataSetTypeWithoutExperimentChecker, getDSSFactory());
     }
 
     @Override
@@ -225,44 +230,51 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
     public IExperimentTable createExperimentTable(final Session session)
     {
         return new ExperimentTable(getDaoFactory(), session, getRelationshipService(),
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IMaterialTable createMaterialTable(final Session session)
     {
-        return new MaterialTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new MaterialTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IExperimentBO createExperimentBO(final Session session)
     {
         return new ExperimentBO(getDaoFactory(), session, getRelationshipService(),
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IPropertyTypeTable createPropertyTypeTable(final Session session)
     {
-        return new PropertyTypeTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new PropertyTypeTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IPropertyTypeBO createPropertyTypeBO(final Session session)
     {
-        return new PropertyTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new PropertyTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IVocabularyBO createVocabularyBO(Session session)
     {
-        return new VocabularyBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new VocabularyBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public final IVocabularyTermBO createVocabularyTermBO(Session session)
     {
-        return new VocabularyTermBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new VocabularyTermBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
@@ -270,59 +282,68 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
             EntityKind entityKind)
     {
         return new EntityTypePropertyTypeBO(getDaoFactory(), session, entityKind,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IProjectBO createProjectBO(Session session)
     {
         return new ProjectBO(getDaoFactory(), session, getRelationshipService(),
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IEntityTypeBO createEntityTypeBO(Session session)
     {
-        return new EntityTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new EntityTypeBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IMaterialBO createMaterialBO(Session session)
     {
-        return new MaterialBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new MaterialBO(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IAuthorizationGroupBO createAuthorizationGroupBO(Session session)
     {
         return new AuthorizationGroupBO(getDaoFactory(), session,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IGridCustomFilterOrColumnBO createGridCustomFilterBO(Session session)
     {
         return new GridCustomFilterBO(getDaoFactory(), session,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IGridCustomFilterOrColumnBO createGridCustomColumnBO(Session session)
     {
         return new GridCustomColumnBO(getDaoFactory(), session,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public ITrashBO createTrashBO(Session session)
     {
-        return new TrashBO(getDaoFactory(), this, session, getManagedPropertyEvaluatorFactory());
+        return new TrashBO(getDaoFactory(), this, session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
     public IDeletionTable createDeletionTable(Session session)
     {
-        return new DeletionTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory());
+        return new DeletionTable(getDaoFactory(), session, getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
@@ -330,7 +351,8 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
             IMasterDataScriptRegistrationRunner masterDataScriptRunner)
     {
         return new CorePluginTable(getDaoFactory(), session, masterDataScriptRunner,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
     @Override
@@ -344,7 +366,8 @@ public final class CommonBusinessObjectFactory extends AbstractBusinessObjectFac
     {
         return new MetaprojectBO(getDaoFactory(), createExperimentBO(session),
                 createSampleBO(session), createDataBO(session), createMaterialBO(session), session,
-                getManagedPropertyEvaluatorFactory());
+                getManagedPropertyEvaluatorFactory(), 
+                dataSetTypeWithoutExperimentChecker);
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
index d4b768b5e0530dea8eec3055965a95924a189fb4..423ca7462362118dc579fa0ab7e237ab5b49604b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
@@ -31,6 +31,7 @@ import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IDataStoreServiceFactory;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConverter;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAttachmentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAuthorizationGroupDAO;
@@ -79,6 +80,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Identifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentHolderPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
@@ -89,6 +91,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RelationshipTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
@@ -111,28 +114,34 @@ abstract class AbstractBusinessObject implements IDAOFactory
 
     protected final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory;
 
+    protected final DataSetTypeWithoutExperimentChecker dataSetTypeChecker;
+    
     protected Map<String, List<AttachmentPE>> attachmentHolderPermIdToAttachmentsMap;
 
     AbstractBusinessObject(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory,
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
         this(daoFactory, session, (IEntityPropertiesConverter) null,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     AbstractBusinessObject(final IDAOFactory daoFactory, final Session session,
             EntityKind entityKindOrNull,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory,
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
         this(daoFactory, session, entityKindOrNull == null ? null : new EntityPropertiesConverter(
                 entityKindOrNull, daoFactory, managedPropertyEvaluatorFactory),
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     AbstractBusinessObject(final IDAOFactory daoFactory, final Session session,
             IEntityPropertiesConverter converter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory,
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
+        this.dataSetTypeChecker = dataSetTypeChecker;
         assert daoFactory != null : "Given DAO factory can not be null.";
         assert session != null : "Given session can not be null.";
 
@@ -721,4 +730,27 @@ abstract class AbstractBusinessObject implements IDAOFactory
             }
         }
     }
+    
+    protected void checkSampleWithoutDatasets(IDataDAO dataDAO, SamplePE sample)
+    {
+        List<DataPE> dataSets = getDataDAO().listDataSets(sample);
+        for (DataPE dataSet : dataSets)
+        {
+        }
+        if (hasDatasets2(dataDAO, sample))
+        {
+            throw UserFailureException
+                    .fromTemplate(
+                            "Operation cannot be performed, because some datasets have been already produced for the sample '%s'.",
+                            sample.getSampleIdentifier());
+        }
+    }
+    
+    protected boolean hasDatasets2(IDataDAO dataDAO, SamplePE sample)
+    {
+        assert sample != null;
+
+        return dataDAO.hasDataSet(sample);
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java
index 4f2dbe501cc7e1d19db11fce12b846d6318a3579..9ce7234da732b73a8e6b83f051553caa20721fe1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java
@@ -59,8 +59,6 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti
 
     protected IRelationshipService relationshipService;
 
-    protected DataSetTypeWithoutExperimentChecker dataSetTypeChecker;
-    
     private IServiceConversationClientManagerLocal conversationClient;
 
     public AbstractDataSetBusinessObject(IDAOFactory daoFactory, Session session,
@@ -69,10 +67,9 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti
             IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
             DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, EntityKind.DATA_SET, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, EntityKind.DATA_SET, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
         this.conversationClient = conversationClient;
-        this.dataSetTypeChecker = dataSetTypeChecker;
     }
 
     public AbstractDataSetBusinessObject(IDAOFactory daoFactory, Session session,
@@ -82,10 +79,9 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti
             IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
             DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
         this.conversationClient = conversationClient;
-        this.dataSetTypeChecker = dataSetTypeChecker;
     }
 
     protected void enrichWithParentsAndExperiment(DataPE dataPE)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java
index 7b926f9a7123206b52da7091ecac741ad66f5549..04a502f070361f4e0f109a330e947e56e0cd4848 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractMaterialBusinessObject.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.server.business.bo;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -33,16 +34,19 @@ import ch.systemsx.cisd.openbis.generic.shared.managed_property.IManagedProperty
 public class AbstractMaterialBusinessObject extends AbstractBusinessObject
 {
     protected AbstractMaterialBusinessObject(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, EntityKind.MATERIAL, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, EntityKind.MATERIAL, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     protected AbstractMaterialBusinessObject(final IDAOFactory daoFactory, final Session session,
             final IEntityPropertiesConverter entityPropertiesConverter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory, 
+                dataSetTypeChecker);
     }
 
     private static final String PROPERTY_TYPES = "materialType.materialTypePropertyTypesInternal";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
index e36018ed286e5e3033043bb555babbea824c30ad..5c3aebf794930e3e264fb5e6306f548dcad19448 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
@@ -30,8 +30,8 @@ import java.util.Stack;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IEntityOperationChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwner;
-import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
@@ -81,9 +81,10 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
     AbstractSampleBusinessObject(final IDAOFactory daoFactory, final Session session,
             IRelationshipService relationshipService,
             IEntityOperationChecker entityOperationChecker,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, EntityKind.SAMPLE, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, EntityKind.SAMPLE, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
         this.entityOperationChecker = entityOperationChecker;
     }
@@ -92,9 +93,10 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
             final IEntityPropertiesConverter entityPropertiesConverter,
             IRelationshipService relationshipService,
             IEntityOperationChecker entityOperationChecker,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
         this.entityOperationChecker = entityOperationChecker;
     }
@@ -422,7 +424,6 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
     {
         String spaceCode = projectIdentifier.getSpaceCode();
         String projectCode = projectIdentifier.getProjectCode();
-        String databaseInstanceCode = projectIdentifier.getDatabaseInstanceCode();
         ProjectPE project =
                 getProjectDAO().tryFindProject(spaceCode, projectCode);
         if (project == null)
@@ -495,11 +496,11 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
         SampleGenericBusinessRules.assertValidComponents(sample);
     }
 
-    protected boolean hasDatasets(IDataDAO dataDAO, SamplePE sample)
+    private boolean hasDatasets(IDataDAO dataDAO, SamplePE sample)
     {
         // If we just added new data sets in this BO, they won't have data sets, so no need to
         // check.
-        return (onlyNewSamples == false) && SampleUtils.hasDatasets(dataDAO, sample);
+        return (onlyNewSamples == false) && hasDatasets2(dataDAO, sample);
     }
 
     protected boolean updateSpace(SamplePE sample, SampleIdentifier sampleOwnerIdentifier,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java
index bd478d6a32de5de7ae20d6194462c5640ac798c6..c33fdb71e9de5db584d1ff62148675db474fe018 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleIdentifierBusinessObject.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwner;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwnerFinder;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
@@ -46,17 +47,19 @@ abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessOb
     private final SampleOwnerFinder sampleOwnerFinder;
 
     AbstractSampleIdentifierBusinessObject(final IDAOFactory daoFactory, final Session session,
-            EntityKind entityKind, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            EntityKind entityKind, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityKind, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityKind, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         sampleOwnerFinder = new SampleOwnerFinder(daoFactory, findPerson());
     }
 
     public AbstractSampleIdentifierBusinessObject(IDAOFactory daoFactory, Session session,
             IEntityPropertiesConverter converter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, converter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, converter, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         sampleOwnerFinder = new SampleOwnerFinder(daoFactory, findPerson());
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java
index e59b75e951bb3492c8fa65c4b42a24dc4cf71aff..01499d11aab3795fc8107926da3d11d1325b5ab1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AttachmentBO.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Attachment;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentHolderPE;
@@ -45,9 +46,10 @@ public final class AttachmentBO extends AbstractBusinessObject implements IAttac
     private boolean dataChanged;
 
     public AttachmentBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java
index b188f61867860829a298958f3d77ae7e1a48b34a..26c4ba64dc7aee175f27827106298216a5048677 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBO.java
@@ -25,6 +25,7 @@ import org.springframework.dao.DataRetrievalFailureException;
 
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AuthorizationGroupUpdates;
@@ -55,16 +56,18 @@ public class AuthorizationGroupBO extends AbstractBusinessObject implements IAut
     @Private
     AuthorizationGroupBO(IDAOFactory daoFactory, Session session,
             IAuthorizationGroupFactory factory,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.groupFactory = factory;
     }
 
     public AuthorizationGroupBO(IDAOFactory daoFactory, Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        this(daoFactory, session, new AuthorizationGroupFactory(), managedPropertyEvaluatorFactory);
+        this(daoFactory, session, new AuthorizationGroupFactory(), managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     interface IAuthorizationGroupFactory
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java
index e8fb744947b98564c9392c0b4e5a93632523c257..33a08aa67198b3833864c260c0925ce8c4ddfb44 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTable.java
@@ -28,6 +28,7 @@ import ch.systemsx.cisd.common.logging.Log4jSimpleLogger;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.logging.LogLevel;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.coreplugin.AsCorePluginPaths;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.IMasterDataScriptRegistrationRunner;
@@ -50,9 +51,10 @@ public final class CorePluginTable extends AbstractBusinessObject implements ICo
 
     public CorePluginTable(IDAOFactory daoFactory, Session session,
             IMasterDataScriptRegistrationRunner masterDataScriptRunner,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.masterDataScriptRunner = masterDataScriptRunner;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java
index 3e71dd1f2a2beb3674adea1e6fe0f05e80dfcb3c..923509011be5210a214365a9ea9eb6eb9059b3e4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DeletionTable.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -42,9 +43,10 @@ public class DeletionTable extends AbstractBusinessObject implements IDeletionTa
     private List<Deletion> deletions;
 
     public DeletionTable(IDAOFactory daoFactory, Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
index 2a7b24c3a5b5a0dc9300cf93f6cbad2b10c177bf..f7989811c3660616bf85bb2be05156fa18acb04e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
@@ -23,6 +23,7 @@ import java.util.regex.PatternSyntaxException;
 import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
@@ -67,9 +68,10 @@ public final class EntityTypeBO extends AbstractBusinessObject implements IEntit
     private EntityKind entityKind;
 
     public EntityTypeBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     private ScriptPE getValidationScriptPE(EntityType entityType)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
index a9a260681b907a87e10bde171c5a521c56646011..e8b46d20d6c5208c882ce33a1bc9a983ec959dbc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBO.java
@@ -26,6 +26,7 @@ import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.EntityPropertiesConverter;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
@@ -63,17 +64,19 @@ public class EntityTypePropertyTypeBO extends AbstractBusinessObject implements
     @Private
     EntityTypePropertyTypeBO(IDAOFactory daoFactory, Session session, EntityKind entityKind,
             IEntityPropertiesConverter converter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         propertiesConverter = converter;
         this.entityKind = entityKind;
     }
 
     public EntityTypePropertyTypeBO(IDAOFactory daoFactory, Session session, EntityKind entityKind,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         propertiesConverter =
                 new EntityPropertiesConverter(entityKind, daoFactory,
                         managedPropertyEvaluatorFactory);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
index ed21dc028224e3a69dc32571c329cb98627b0a5a..ccafafc89c1443951296613289597a894fced629 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
@@ -29,6 +29,7 @@ import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.collection.CollectionUtils;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
@@ -90,17 +91,19 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
 
     public ExperimentBO(final IDAOFactory daoFactory, final Session session,
             IRelationshipService relationshipService,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
     }
 
     ExperimentBO(final IDAOFactory daoFactory, final Session session,
             final IEntityPropertiesConverter entityPropertiesConverter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @SuppressWarnings("unused")
@@ -514,7 +517,7 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
     {
         for (SamplePE sample : samples)
         {
-            SampleUtils.checkSampleWithoutDatasets(getDataDAO(), sample);
+            checkSampleWithoutDatasets(getDataDAO(), sample);
 
             relationshipService.unassignSampleFromExperiment(session, sample);
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java
index 20f3c1c8911a37d46478f669aad517671ccfab09..1d88c349ac9768747f8dfddc2a3c26c6f4264557 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTable.java
@@ -30,6 +30,7 @@ import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO;
@@ -71,16 +72,18 @@ public final class ExperimentTable extends AbstractBusinessObject implements IEx
 
     ExperimentTable(final IDAOFactory daoFactory, final Session session,
             IEntityPropertiesConverter converter,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, converter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, converter, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     public ExperimentTable(final IDAOFactory daoFactory, final Session session,
             IRelationshipService relationshipService,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, EntityKind.EXPERIMENT, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java
index adca9deacddd4aea9e23b1748e4964f276c831a6..c991341463b2a65622497d134707a1cf0716dcae 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomColumnBO.java
@@ -23,6 +23,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataRetrievalFailureException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ExpressionUtil;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -45,9 +46,10 @@ public class GridCustomColumnBO extends AbstractBusinessObject implements
     private GridCustomColumnPE column;
 
     public GridCustomColumnBO(IDAOFactory daoFactory, Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java
index e0f4f271c04c4ef6b1ba4546f4fb184ac6845c1b..ee8c5ab9bfbe6983d657e498e9feff041ed763f9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBO.java
@@ -20,6 +20,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataRetrievalFailureException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IExpressionUpdates;
@@ -39,9 +40,10 @@ public class GridCustomFilterBO extends AbstractBusinessObject implements
     private GridCustomFilterPE filter;
 
     public GridCustomFilterBO(IDAOFactory daoFactory, Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
index 50eb712633af17bdfbfb17590a9d5c61472186f1..9be0d686f6c51cc0ddc6b5d696eeecedf990c501 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
@@ -23,6 +23,7 @@ import java.util.Set;
 import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -56,9 +57,10 @@ public final class MaterialBO extends AbstractMaterialBusinessObject implements
     private boolean dataChanged;
 
     public MaterialBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java
index cff900e852738f22be5312118be293caf7fc2317..7c1512ba4970be142a90a6102fff99981958c7c0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTable.java
@@ -28,6 +28,7 @@ import org.springframework.dao.DataIntegrityViolationException;
 
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -57,18 +58,21 @@ public final class MaterialTable extends AbstractMaterialBusinessObject implemen
     private boolean dataChanged;
 
     public MaterialTable(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Private
     // for tests only
     MaterialTable(final IDAOFactory daoFactory, final Session session,
             final IEntityPropertiesConverter entityPropertiesConverter, List<MaterialPE> materials,
-            boolean dataChanged, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            boolean dataChanged, IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, entityPropertiesConverter, managedPropertyEvaluatorFactory, 
+                dataSetTypeChecker);
         this.materials = materials;
         this.dataChanged = dataChanged;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java
index 6d76278f6c37fb7b91eb54b8d048e48dc3a8b5f4..5c74ccd51d0d15e1be385660029cbe132e86d366 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MetaprojectBO.java
@@ -27,6 +27,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.orm.ObjectRetrievalFailureException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation;
@@ -81,9 +82,10 @@ public class MetaprojectBO extends AbstractBusinessObject implements IMetaprojec
 
     public MetaprojectBO(final IDAOFactory daoFactory, IExperimentBO experimentBO,
             ISampleBO sampleBO, IDataBO dataBO, IMaterialBO materialBO, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
 
         this.experimentBO = experimentBO;
         this.sampleBO = sampleBO;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
index ffb47dbe4dc7c246201fb6267aa88a6d5f3cf32e..b8eaf3f7e0c6a6c612c024ba2f16abd0b0e2789c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java
@@ -27,6 +27,7 @@ import org.springframework.orm.ObjectRetrievalFailureException;
 import ch.systemsx.cisd.common.collection.CollectionUtils;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO;
 import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper;
@@ -78,9 +79,10 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB
 
     public ProjectBO(final IDAOFactory daoFactory, final Session session,
             IRelationshipService relationshipService,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.relationshipService = relationshipService;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
index 0f526a5dd45cd769b8842b13921fa1eceaab19b6..ffcba298ef02d97705139f0ecec35384fe354af8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
@@ -28,6 +28,7 @@ import org.w3c.dom.Document;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
 import ch.systemsx.cisd.common.xml.XMLInfraStructure;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -61,9 +62,10 @@ public final class PropertyTypeBO extends VocabularyBO implements IPropertyTypeB
     private PropertyTypePE propertyTypePE;
 
     public PropertyTypeBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java
index 012d778471684c6d6413a46b8c50c1c243f5a198..02e2c0720a4545aedb14a1ed15ca9e980b5a650e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeTable.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo;
 
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
@@ -34,9 +35,10 @@ public final class PropertyTypeTable extends AbstractBusinessObject implements I
     private List<PropertyTypePE> propertyTypes;
 
     public PropertyTypeTable(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java
index 81a5a6434eac6c34b73655624fa81ed0ad2b81be..4fb95f84254316d684ff1c86d9578d17d0b39904 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTable.java
@@ -23,6 +23,7 @@ import org.springframework.dao.DataIntegrityViolationException;
 
 import ch.systemsx.cisd.common.collection.TableMap;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.util.KeyExtractorFactory;
 import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper;
@@ -52,9 +53,10 @@ public final class RoleAssignmentTable extends AbstractBusinessObject implements
     private TableMap<String, AuthorizationGroupPE> authorizationGroupsByCode;
 
     public RoleAssignmentTable(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     private final PersonPE getPerson(final String userId)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
index 4acceba5b3b4b3afefc8eefce35b8727c298eb08..7706876db036376577c0008666df8330df20c3b5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
@@ -27,6 +27,7 @@ import org.springframework.dao.DataIntegrityViolationException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IEntityOperationChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertiesConverter;
@@ -69,20 +70,22 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam
     public SampleBO(final IDAOFactory daoFactory, final Session session,
             final IRelationshipService relationshipService,
             final IEntityOperationChecker entityOperationChecker,
-            final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            final IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
         super(daoFactory, session, relationshipService, entityOperationChecker,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     SampleBO(final IDAOFactory daoFactory, final Session session,
             final IEntityPropertiesConverter entityPropertiesConverter,
             IRelationshipService relationshipService,
             final IEntityOperationChecker entityOperationChecker,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
         super(daoFactory, session, entityPropertiesConverter, relationshipService,
-                entityOperationChecker, managedPropertyEvaluatorFactory);
+                entityOperationChecker, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     //
@@ -234,9 +237,9 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam
         assert sample != null : "Sample not loaded.";
 
         checkAvailable(sample);
-        checkSampleInGroup(sample);
+        checkSpaceSample(sample);
         checkSampleUnused(sample);
-        checkSampleWithoutDatasets();
+        checkSampleWithoutDatasets(getDataDAO(), sample);
 
         this.relationshipService.assignSampleToExperiment(session, sample, experiment);
         try
@@ -260,11 +263,6 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam
         }
     }
 
-    private final void checkSampleWithoutDatasets()
-    {
-        SampleUtils.checkSampleWithoutDatasets(getDataDAO(), sample);
-    }
-
     private final static void checkSampleUnused(final SamplePE sample)
     {
         ExperimentPE experiment = sample.getExperiment();
@@ -277,7 +275,7 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam
         }
     }
 
-    private final static void checkSampleInGroup(final SamplePE sample)
+    private final static void checkSpaceSample(final SamplePE sample)
     {
         if (sample.getSpace() == null)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
index a7121ffe29f27b42c5880af1dd12ae2539863e7a..37bc0dd5f7bda56c61ba91903f581811f4510e64 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
@@ -30,6 +30,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.IEntityOperationChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwner;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -75,10 +76,11 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I
     public SampleTable(final IDAOFactory daoFactory, final Session session,
             IRelationshipService relationshipService,
             IEntityOperationChecker entityOperationChecker,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
         super(daoFactory, session, relationshipService, entityOperationChecker,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java
index cb92bf0c4068b191bae557dd63972eb0e8ac3a07..f43d831621e65bfc5e64ac673ffc6c210efd93f9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBO.java
@@ -22,6 +22,7 @@ import org.springframework.dao.DataRetrievalFailureException;
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.jython.evaluator.EvaluatorException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IScriptDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.dynamic_property.calculator.JythonDynamicPropertyCalculator;
@@ -53,19 +54,22 @@ public final class ScriptBO extends AbstractBusinessObject implements IScriptBO
     private final IJythonEvaluatorPool jythonEvaluatorPool;
 
     public ScriptBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory,
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker,
             IJythonEvaluatorPool jythonEvaluationPool)
     {
-        this(daoFactory, session, new ScriptFactory(), managedPropertyEvaluatorFactory, jythonEvaluationPool);
+        this(daoFactory, session, new ScriptFactory(), managedPropertyEvaluatorFactory, dataSetTypeChecker,
+                jythonEvaluationPool);
     }
 
     @Private
     // for testing
     ScriptBO(final IDAOFactory daoFactory, final Session session, IScriptFactory scriptFactory,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory,
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker,
             IJythonEvaluatorPool jythonEvaluationPool)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.scriptFactory = scriptFactory;
         this.jythonEvaluatorPool = jythonEvaluationPool;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcher.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcher.java
index 657bf27963a22210cf166561d95554d0db9c47f5..c65fdeada095cf28c8ca947a1b9c1fcebf5be8c4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcher.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcher.java
@@ -28,6 +28,7 @@ import java.util.Set;
 import ch.systemsx.cisd.common.collection.IKeyExtractor;
 import ch.systemsx.cisd.common.collection.TableMap;
 import ch.systemsx.cisd.openbis.generic.server.business.IDataStoreServiceFactory;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.AbstractEntitySearchResultLocation;
@@ -71,9 +72,10 @@ public class SearchDomainSearcher extends AbstractBusinessObject implements ISea
     private final IDataStoreServiceFactory dssFactory;
 
     public SearchDomainSearcher(IDAOFactory daoFactory, Session session, 
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, IDataStoreServiceFactory dssFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker, IDataStoreServiceFactory dssFactory)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.dssFactory = dssFactory;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java
index 889d42a1246f5edb8af8c842f687ca954808ec16..6b6d3a4d4c23eb7b65ca342aa33773b3b845b55b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBO.java
@@ -22,6 +22,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataRetrievalFailureException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.util.SpaceIdentifierHelper;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -48,9 +49,10 @@ public final class SpaceBO extends AbstractBusinessObject implements ISpaceBO
     private SpacePE space;
 
     public SpaceBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
index 1c715104319f1eb8d55b764725afb727b9904703..69472ee23b85e452a40c337815b0d2f570c31b40 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
@@ -32,6 +32,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.batch.BatchOperationExecutor;
 import ch.systemsx.cisd.openbis.generic.server.batch.IBatchOperation;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatasetLister;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetUtils;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO;
@@ -61,9 +62,10 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO
     private DeletionPE deletion;
 
     public TrashBO(IDAOFactory daoFactory, ICommonBusinessObjectFactory boFactory, Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         this.boFactory = boFactory;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
index 5dce68f7d96d1771444a1873731b46247e3b974d..8aeb93dd53cd0a6ef6c83601887f5abd2626d7a0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBO.java
@@ -35,6 +35,7 @@ import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.collection.IKeyExtractor;
 import ch.systemsx.cisd.common.collection.TableMap;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertyTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.util.KeyExtractorFactory;
@@ -81,17 +82,19 @@ public class VocabularyBO extends AbstractBusinessObject implements IVocabularyB
     private boolean allowChangingInternallyManaged = false;
 
     public VocabularyBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     // For tests only
     @Private
     VocabularyBO(final IDAOFactory daoFactory, final Session session, VocabularyPE vocabulary,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
         vocabularyPE = vocabulary;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java
index 0ddd7313a43f0939bf29d76b1fc53b4922421e51..519278f6dfb7702249557559c7bb7916cdcaff17 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyTermBO.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.springframework.dao.DataRetrievalFailureException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates;
@@ -39,9 +40,10 @@ public final class VocabularyTermBO extends AbstractBusinessObject implements IV
     private VocabularyTermPE vocabularyTermPE;
 
     public VocabularyTermBO(final IDAOFactory daoFactory, final Session session,
-            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory)
+            IManagedPropertyEvaluatorFactory managedPropertyEvaluatorFactory, 
+            DataSetTypeWithoutExperimentChecker dataSetTypeChecker)
     {
-        super(daoFactory, session, managedPropertyEvaluatorFactory);
+        super(daoFactory, session, managedPropertyEvaluatorFactory, dataSetTypeChecker);
     }
 
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
index 402ef5e185e802dd5eb5aad5da0cde7380954cfc..768247cc8464e7b9223e3f1768ad92df44b0f530 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
@@ -16,8 +16,6 @@
 
 package ch.systemsx.cisd.openbis.generic.server.business.bo.util;
 
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
@@ -27,24 +25,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
  */
 public class SampleUtils
 {
-    public static final void checkSampleWithoutDatasets(IDataDAO dataDAO, SamplePE sample)
-    {
-        if (hasDatasets(dataDAO, sample))
-        {
-            throw UserFailureException
-                    .fromTemplate(
-                            "Operation cannot be performed, because some datasets have been already produced for the sample '%s'.",
-                            sample.getSampleIdentifier());
-        }
-    }
-
-    public static boolean hasDatasets(IDataDAO dataDAO, SamplePE sample)
-    {
-        assert sample != null;
-
-        return dataDAO.hasDataSet(sample);
-    }
-
     /** for all experiment samples which belonged to a space the specified space will be set */
     public static void setSamplesSpace(ExperimentPE experiment, SpacePE space)
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
index 7220aa6fba84c262d79fea8fa16fe4512318670b..363a9668c3fa75b4425427cda8f87732f0669ecf 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
@@ -49,7 +49,7 @@ public final class AuthorizationGroupBOTest extends AbstractBOTest
     private final AuthorizationGroupBO createBO()
     {
         return new AuthorizationGroupBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, groupFactory,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     @Test(expectedExceptions = AssertionError.class)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java
index 59bab0f2fb1b00437b7695101c02736a70c4cb26..f1603417ddf22594dcf63d138b894c07fb8ab1d2 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/CorePluginTableTest.java
@@ -62,7 +62,7 @@ public class CorePluginTableTest extends AbstractBOTest
         pluginResourceLoader = context.mock(ICorePluginResourceLoader.class);
         pluginTable =
                 new CorePluginTable(daoFactory, EXAMPLE_SESSION, scriptRunner,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
         createdPluginsMatcher = new RecordingMatcher<List<CorePluginPE>>();
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java
index 369d894fc4198cf72e44308c7d58584d223e43e8..5c7852d93347e1dc1134d6aea3ff71da524e8d5f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBOTest.java
@@ -40,7 +40,7 @@ public class EntityTypeBOTest extends AbstractBOTest
     {
         final String sampleTypeCode = "SAMPLE_TYPE";
         final IEntityTypeBO entityTypeBO =
-                new EntityTypeBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory);
+                new EntityTypeBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory, null);
         final EntityKind entityKind = EntityKind.SAMPLE;
         final SampleTypePE sampleType =
                 new SampleTypePEBuilder().id(1).code(sampleTypeCode).getSampleType();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java
index bff6b413a1eaae1ca464d62ee9c1fc4e5394a768..0b94495e045c0332665a78c88a62b4c0ac6b2ef6 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypePropertyTypeBOTest.java
@@ -233,7 +233,7 @@ public final class EntityTypePropertyTypeBOTest extends AbstractBOTest
     private final EntityTypePropertyTypeBO createEntityTypePropertyTypeBO(EntityKind entityKind)
     {
         return new EntityTypePropertyTypeBO(daoFactory, EXAMPLE_SESSION, entityKind,
-                propertiesConverter, managedPropertyEvaluatorFactory);
+                propertiesConverter, managedPropertyEvaluatorFactory, null);
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
index 07ca99fa8dc936f46d83e927d8ec796f16565939..e81e36b1be7cda556091284455de286ead02f6b3 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
@@ -93,7 +93,7 @@ public final class ExperimentBOTest extends AbstractBOTest
     private final ExperimentBO createExperimentBO()
     {
         return new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     @BeforeMethod
@@ -452,7 +452,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareLoadExperimentByIdentifier(identifier, exp);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
         bo.loadByExperimentIdentifier(identifier);
 
         ExperimentPE experiment = bo.getExperiment();
@@ -489,7 +489,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, null);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -516,7 +516,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, null);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -544,7 +544,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, newConvertedProperties);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -572,7 +572,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, newConvertedProperties);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -601,7 +601,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, newConvertedProperties);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -626,7 +626,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, newConvertedProperties);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
@@ -651,7 +651,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareEntity(existingProperties, newConvertedProperties);
         ExperimentBO bo =
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
 
         bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java
index fbf076b40dd6eb45b3107fa9696aa5e8cfdda9bf..be6462ec72fc867f0c2cf3c531df58206fd6b06b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentTableTest.java
@@ -45,7 +45,7 @@ public final class ExperimentTableTest extends AbstractBOTest
     private final ExperimentTable createExperimentTable()
     {
         return new ExperimentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION,
-                propertiesConverter, managedPropertyEvaluatorFactory);
+                propertiesConverter, managedPropertyEvaluatorFactory, null);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java
index 5b804826b672f95f25e29206ccd89c5b9ddfc251..7ddaa7e2e5727cc901e97decdecd045d26116e5d 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GridCustomFilterBOTest.java
@@ -99,7 +99,7 @@ public class GridCustomFilterBOTest extends AbstractBOTest
 
     private final IGridCustomFilterOrColumnBO createFilterBO()
     {
-        return new GridCustomFilterBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory);
+        return new GridCustomFilterBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory, null);
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
index 131787e4ec8564bfd12f3d3008ce2281983c3c7b..dbbbdf4373bf31cc284b24bf4f708ee78102642d 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
@@ -47,7 +47,7 @@ public final class MaterialTableTest extends AbstractBOTest
     private final MaterialTable createMaterialTable(List<MaterialPE> materials, boolean dataChanged)
     {
         return new MaterialTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
-                materials, dataChanged, managedPropertyEvaluatorFactory);
+                materials, dataChanged, managedPropertyEvaluatorFactory, null);
     }
 
     private final MaterialTable createMaterialTable()
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java
index 62db710df01b22c5a102608e549d02d8a726c3f7..dea4a1aeaa9462e19222225ee193e06136447f7a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBOTest.java
@@ -55,7 +55,7 @@ public final class ProjectBOTest extends AbstractBOTest
     private final ProjectBO createProjectBO()
     {
         return new ProjectBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java
index e2714551e213d0e336773efe20c5c51e4b00a320..4434109269c80929474988cc2e065ca66b064f1c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBOTest.java
@@ -54,7 +54,7 @@ public final class PropertyTypeBOTest extends AbstractBOTest
     private final PropertyTypeBO createPropertyTypeBO()
     {
         return new PropertyTypeBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     static final PropertyType createPropertyType(final DataTypeCode dataTypeCode)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java
index a7174bde7704b148c10c6bd651299edcf24394a2..c9f974c95bd9266bb66b2e3f8d6fbdbffb693312 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/RoleAssignmentTableTest.java
@@ -40,7 +40,7 @@ public final class RoleAssignmentTableTest extends AbstractBOTest
     private final RoleAssignmentTable createRoleAssignmentTable()
     {
         return new RoleAssignmentTable(daoFactory, ManagerTestTool.EXAMPLE_SESSION,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
index 76ffacea05833c74ca8f45b24705f38516cd4f7f..c8404f764e6ebe0474703b3cdec43a0e254bfbec 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
@@ -997,7 +997,7 @@ public final class SampleBOTest extends AbstractBOTest
     private final SampleBO createSampleBO()
     {
         return new SampleBO(daoFactory, EXAMPLE_SESSION, propertiesConverter, relationshipService,
-                entityOperationChecker, managedPropertyEvaluatorFactory);
+                entityOperationChecker, managedPropertyEvaluatorFactory, null);
     }
 
     private SampleType createSampleType(final String sampleTypeCode)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java
index deff7e8817b5c265bb4e8eee084182df3b6a8aa8..882e395d7565393c677dc3454d61ee4bf0186733 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTableTest.java
@@ -86,7 +86,7 @@ public final class SampleTableTest extends AbstractBOTest
     private final SampleTable createSampleTableBO()
     {
         return new SampleTable(daoFactory, EXAMPLE_SESSION, null, entityOperationChecker,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     private final static SampleIdentifier getSharedSampleIdentifier(final String code)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java
index db6bcdcaac64c97edddcc61ffe149c6baba03623..c1ec76f31885006aff2246623ab222753fb03d4e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ScriptBOTest.java
@@ -75,7 +75,7 @@ public final class ScriptBOTest extends AbstractBOTest
     private final ScriptBO createScriptBO()
     {
         return new ScriptBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, scriptFactory,
-                managedPropertyEvaluatorFactory, new TestJythonEvaluatorPool());
+                managedPropertyEvaluatorFactory, null, new TestJythonEvaluatorPool());
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcherTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcherTest.java
index 83efa094ea2da27c9a2830cbe2e26966fb088ebd..f66cfe8c10926a162483217d86fa23a5dcbf37c5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcherTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SearchDomainSearcherTest.java
@@ -390,7 +390,7 @@ public class SearchDomainSearcherTest extends AbstractBOTest
     private SearchDomainSearcher createSearcher()
     {
         return new SearchDomainSearcher(daoFactory, ManagerTestTool.EXAMPLE_SESSION,
-                managedPropertyEvaluatorFactory, dssFactory);
+                managedPropertyEvaluatorFactory, null, dssFactory);
     }
 
     protected List<String> getPermIds(final IPermIdHolder... permIdHolders)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java
index a1e33bfc791b13fbf3dac78a227c4df1be39114c..f873d292f6a41095e65e50b92fa90a1f6898157f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SpaceBOTest.java
@@ -32,7 +32,7 @@ public final class SpaceBOTest extends AbstractBOTest
     private final SpaceBO createSpaceBO()
     {
         return new SpaceBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
index 2bc326bd78beb405ceddc4b8f667fcf370f36190..ff41f7ec1376b9baa2ce56babb63c69b523735af 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
@@ -94,7 +94,7 @@ public final class TrashBOTest extends AbstractBOTest
         dataSetTable = context.mock(IDataSetTable.class);
         trashBO =
                 new TrashBO(daoFactory, boFactory, ManagerTestTool.EXAMPLE_SESSION,
-                        managedPropertyEvaluatorFactory);
+                        managedPropertyEvaluatorFactory, null);
         context.checking(new Expectations()
             {
                 {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java
index 065b7e04b0ea89416f3c39a3ba7e7491bfb5ea2f..dbb890920bb30a6e66e12411bd0b0c6113dbda51 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/VocabularyBOTest.java
@@ -78,13 +78,13 @@ public final class VocabularyBOTest extends AbstractBOTest
 
     private final VocabularyBO createVocabularyBO()
     {
-        return new VocabularyBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory);
+        return new VocabularyBO(daoFactory, EXAMPLE_SESSION, managedPropertyEvaluatorFactory, null);
     }
 
     private final VocabularyBO createVocabularyBO(VocabularyPE vocabulary)
     {
         return new VocabularyBO(daoFactory, EXAMPLE_SESSION, vocabulary,
-                managedPropertyEvaluatorFactory);
+                managedPropertyEvaluatorFactory, null);
     }
 
     static final NewVocabulary createVocabulary()