diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
index 7668b71de2fba3b6167157b43532a32f65a370ba..a71cb39e6f90c0ad2b397ef9eef2056fc2781edf 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.authorization.predicate;
 import java.util.Arrays;
 import java.util.List;
 
+import org.jmock.Expectations;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.exceptions.Status;
@@ -107,6 +108,20 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         prepareProvider(groups);
         predicate.init(provider);
 
+        SpacePE space = new SpacePE();
+        space.setCode(ANOTHER_SPACE_CODE);
+
+        context.checking(new Expectations()
+            {
+                {
+                    one(provider).tryGetSpace(ANOTHER_SPACE_CODE);
+                    will(returnValue(space));
+
+                    one(provider).tryGetSampleBySpaceAndCode(space, "S1");
+                    will(returnValue(null));
+                }
+            });
+
         Status status = predicate.evaluate(createPerson(), createRoles(false), sample);
 
         assertEquals(true, status.isError());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
index d7a54ab1fbd1425d0e4a80942008bd7be6aeb049..c0e525b47f327d084ef7cd6632c6f567bc283e1f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
@@ -34,6 +34,7 @@ import javax.sql.DataSource;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.testng.annotations.Test;
@@ -43,6 +44,7 @@ import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException;
 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.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
@@ -73,8 +75,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignmentsIds;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAuthorizationGroup;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
@@ -87,14 +87,16 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchCriteriaConnection;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.dataset.DataSetCodeId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.experiment.ExperimentIdentifierId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.metaproject.MetaprojectIdentifierId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.sample.SampleIdentifierId;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO;
+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.ProjectUpdatesDTO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
@@ -110,6 +112,9 @@ import junit.framework.Assert;
 public class CommonServerTest extends SystemTestCase
 {
 
+    @Autowired
+    private IDAOFactory daoFactory;
+
     private Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, getClass());
 
     @Test
@@ -1133,27 +1138,26 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_EXPERIMENTS");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
+
+        ExperimentPE experiment = daoFactory.getExperimentDAO().tryGetByTechId(new TechId(23L));
+        experiment.addMetaproject(metaproject);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addExperiment(new ExperimentIdentifierId("/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST"));
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        List<Experiment> experiments =
+                commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
 
         if (user.isInstanceUserOrTestSpaceUserOrEnabledTestProjectUser())
         {
-            List<Experiment> experiments =
-                    commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
-
             assertEquals(experiments.size(), 1);
             assertEquals(experiments.get(0).isStub(), false);
             assertEquals(experiments.get(0).getIdentifier(), "/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST");
         } else
         {
-            List<Experiment> experiments =
-                    commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
             assertEquals(experiments.size(), 1);
             assertEquals(experiments.get(0).isStub(), true);
         }
@@ -1164,14 +1168,15 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_SAMPLES");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addSample(new SampleIdentifierId("/TEST-SPACE/EV-TEST"));
+        SamplePE sample = daoFactory.getSampleDAO().tryGetByTechId(new TechId(1055L)); // /TEST-SPACE/EV-TEST
+        sample.addMetaproject(metaproject);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
         List<Sample> samples =
                 commonServer.listMetaprojectSamples(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
@@ -1193,14 +1198,15 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_DATASETS");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addDataSet(new DataSetCodeId("20120628092259000-41"));
+        DataPE dataSet = daoFactory.getDataDAO().tryToFindDataSetByCode("20120628092259000-41");
+        dataSet.addMetaproject(metaproject);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
         List<AbstractExternalData> dataSets =
                 commonServer.listMetaprojectExternalData(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
index 4dfbf13892249c7632500d7ad0c184c31af19abe..86f16f4b4f78f4135030365450ff3e790ae108eb 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
@@ -766,7 +766,7 @@ public class EntityOperationTest extends SystemTestCase
                         .getDataSet()).create();
 
         performFailingEntityOperations(sessionToken, eo, "Authorization failure: ERROR: \"None of method roles "
-                + "'[SPACE_USER, SPACE_POWER_USER, SPACE_ADMIN, INSTANCE_ADMIN, SPACE_ETL_SERVER, INSTANCE_ETL_SERVER]' "
+                + "'[PROJECT_USER, PROJECT_POWER_USER, PROJECT_ADMIN, SPACE_ADMIN, INSTANCE_ADMIN, SPACE_POWER_USER, SPACE_USER, SPACE_ETL_SERVER, INSTANCE_ETL_SERVER]' "
                 + "could be found in roles of user 'EO_OBSERVER'.\".");
     }
     
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
index d5de1ccb7fda26585be4a06301aea194613c9f3d..4895a5d732a694443cfe3f807d237464166b12d3 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
@@ -34,9 +34,9 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException;
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.test.AssertionUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.OpenBISHibernateTransactionManager;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService;
@@ -692,8 +692,13 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
         {
             generalInformationChangingService.deleteDataSets(session, Arrays.asList(dataSetCode), reason, DeletionType.TRASH);
 
-            dataSets = generalInformationService.getDataSetMetaData(adminSession, Arrays.asList(dataSetCode));
-            assertEquals(0, dataSets.size());
+            try
+            {
+                dataSets = generalInformationService.getDataSetMetaData(adminSession, Arrays.asList(dataSetCode));
+            } catch (UserFailureException e)
+            {
+                assertEquals("Unknown data set " + dataSetCode, e.getMessage());
+            }
         } else
         {
             try
@@ -806,7 +811,7 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
             {
                 generalInformationChangingService.registerSamples(session.getSessionID(), sampleType, SESSION_KEY, null);
                 fail();
-            } catch (UserFailureException e)
+            } catch (ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException e)
             {
                 AssertionUtil.assertMatches(".*does not have enough privileges.*", e.getMessage());
             }
@@ -833,7 +838,7 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
             {
                 generalInformationChangingService.updateSamples(session.getSessionID(), sampleType, SESSION_KEY, null);
                 fail();
-            } catch (UserFailureException e)
+            } catch (ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException e)
             {
                 AssertionUtil.assertMatches(".*does not have enough privileges.*", e.getMessage());
             }