diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
index f8caa8bfb60f4672ca8d7ef231fb47c319de698b..ba64b914ca704a6ecaab8f3bb9d9662037422d68 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
@@ -59,6 +59,7 @@ import ch.systemsx.cisd.openbis.generic.server.plugin.SampleServerPluginRegistry
 import ch.systemsx.cisd.openbis.generic.shared.IRemoteHostValidator;
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.ResourceNames;
+import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.ReturnValueFilter;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExpressionValidator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.EntityVisitComparatorByTimeStamp;
@@ -801,6 +802,8 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp
     }
 
     @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
+    @ReturnValueFilter(validatorClass = ExpressionValidator.class)
     public List<GridCustomColumn> listGridCustomColumns(String sessionToken, String gridId)
     {
         Session session = getSession(sessionToken);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index 5f52cbb24b221398cf683aecbdfa115d6ecc08ea..26a4cbece12ddb32445c528560fb19316cb1680c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -2444,6 +2444,26 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
                 serviceDescription.getDatastoreCode(), datasetCodes, parameterBindings);
     }
 
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER)
+    @Capability("ARCHIVE_DATASET")
+    public int archiveDatasets(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodeCollectionPredicate.class)
+            List<String> datasetCodes, boolean removeFromDataStore)
+    {
+        return super.archiveDatasets(sessionToken, datasetCodes, removeFromDataStore);
+    }
+
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    @Capability("UNARCHIVE_DATASET")
+    public int unarchiveDatasets(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodeCollectionPredicate.class)
+            List<String> datasetCodes)
+    {
+        return super.unarchiveDatasets(sessionToken, datasetCodes);
+    }
+
     @Override
     @RolesAllowed(RoleWithHierarchy.INSTANCE_ADMIN)
     public void registerAuthorizationGroup(String sessionToken,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index edf69412cfdff493ff89647a00738a5a726ba8d6..5bce84346f0b17a77ded48a3faef0aba222b0d3a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -414,6 +414,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
     }
 
     @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public long drawANewUniqueID(String sessionToken,
             ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind entityKind)
             throws UserFailureException
@@ -984,6 +985,24 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
         return dataBO.compareAndSetDataSetStatus(oldStatus, newStatus, newPresentInArchive);
     }
 
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public int archiveDatasets(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodeCollectionPredicate.class)
+            List<String> datasetCodes, boolean removeFromDataStore)
+    {
+        return super.archiveDatasets(sessionToken, datasetCodes, removeFromDataStore);
+    }
+
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public int unarchiveDatasets(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodeCollectionPredicate.class)
+            List<String> datasetCodes)
+    {
+        return super.unarchiveDatasets(sessionToken, datasetCodes);
+    }
+
     @Override
     @RolesAllowed(value =
         { RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
@@ -1172,6 +1191,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
     }
 
     @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
     public List<String> generateCodes(String sessionToken, String prefix,
             ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind entityKind, int number)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
index 8917709fde11dc05a12654b97c802926c1aa5b8c..8463a84c16d1ba9bd9ac680638a672047043a439 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
@@ -60,7 +60,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Grantee;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomColumn;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomFilter;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IExpressionUpdates;
@@ -1122,13 +1121,6 @@ public interface ICommonServer extends IServer
 
     // columns
 
-    /**
-     * Lists columns available for selected grid.
-     */
-    @Override
-    @Transactional
-    public List<GridCustomColumn> listGridCustomColumns(String sessionToken, String gridId);
-
     /**
      * Creates a new column.
      */
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/RegressionTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/RegressionTestCase.java
index 33472a4dd535d0783a4b60ed87e2c17c2cd3007c..e60cf495c7f03ee9d331bd1fafddf259773115d7 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/RegressionTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/RegressionTestCase.java
@@ -25,6 +25,8 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.testng.AssertJUnit;
 
+import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed;
+
 /**
  * @author Franz-Josef Elmer
  */
@@ -32,33 +34,59 @@ public class RegressionTestCase extends AssertJUnit
 {
     protected void assertMandatoryMethodAnnotations(Class<?> clazz)
     {
-        assertMandatoryMethodAnnotations(clazz, "");
+        assertMandatoryMethodAnnotations(clazz, clazz);
     }
 
-    protected void assertMandatoryMethodAnnotations(Class<?> clazz, String exceptions)
+    protected void assertMandatoryMethodAnnotations(Class<?> interfaceClass,
+            Class<?> implementingClass)
+    {
+        assertMandatoryMethodAnnotations(interfaceClass, implementingClass, "");
+    }
+
+    protected void assertMandatoryMethodAnnotations(Class<?> interfaceClass,
+            Class<?> implementingClass, String exceptions)
     {
         List<Class<? extends Annotation>> mandatoryAnnotations =
                 new ArrayList<Class<? extends Annotation>>();
-        // TODO: Check RolesAllowed for implementing class
-        // mandatoryAnnotations.add(RolesAllowed.class);
+        mandatoryAnnotations.add(RolesAllowed.class);
         mandatoryAnnotations.add(Transactional.class);
 
         final String noMissingAnnotationsMsg =
-                "Missing annotations in class " + clazz.getCanonicalName() + ":\n";
+                "Annotation checking for interface " + interfaceClass.getName()
+                        + " and implementing class " + implementingClass.getName()
+                        + ": The mandatory annotations doesn't appear in the following methods:\n";
+        assertEquals(true, interfaceClass.isInterface());
+        assertEquals(true, interfaceClass.isAssignableFrom(implementingClass));
+
         StringBuilder problems = new StringBuilder(noMissingAnnotationsMsg);
-        for (Method m : clazz.getDeclaredMethods())
+        for (Method interfaceMethod : interfaceClass.getDeclaredMethods())
         {
             List<String> missingAnnotations = new ArrayList<String>();
-            for (Class<? extends Annotation> c : mandatoryAnnotations)
+            for (Class<? extends Annotation> annotationClass : mandatoryAnnotations)
             {
-                if (m.getAnnotation(c) == null)
+                if (interfaceMethod.getAnnotation(annotationClass) == null)
                 {
-                    missingAnnotations.add(c.getSimpleName());
+                    try
+                    {
+                        Method implementedMethod =
+                                implementingClass.getMethod(interfaceMethod.getName(),
+                                        interfaceMethod.getParameterTypes());
+                        if (implementedMethod.getAnnotation(annotationClass) == null)
+                        {
+                            missingAnnotations.add(annotationClass.getSimpleName());
+                        }
+                    } catch (Exception ex)
+                    {
+                        fail("Method '" + interfaceMethod.toGenericString() + "' of interface "
+                                + interfaceClass.getName()
+                                + " is not defined in implementing class "
+                                + implementingClass.getName() + ".");
+                    }
                 }
             }
             if (missingAnnotations.size() > 0)
             {
-                problems.append(String.format("%s: %s\n", m.getName(),
+                problems.append(String.format("%s: %s\n", interfaceMethod.getName(),
                         StringUtils.join(missingAnnotations, ", ")));
             }
         }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ServerInterfaceRegressionTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ServerInterfaceRegressionTest.java
index 062192e8149399fcc30814f60181a0a14660e81d..141ca7d11c8a94eb65b77d4b9d493c310a649d94 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ServerInterfaceRegressionTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ServerInterfaceRegressionTest.java
@@ -18,6 +18,9 @@ package ch.systemsx.cisd.openbis.generic.shared;
 
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.openbis.generic.server.CommonServer;
+import ch.systemsx.cisd.openbis.generic.server.ETLService;
+
 /**
  * @author Franz-Josef Elmer
  */
@@ -27,13 +30,13 @@ public class ServerInterfaceRegressionTest extends RegressionTestCase
     @Test
     public void testICommonServer()
     {
-        assertMandatoryMethodAnnotations(ICommonServer.class,
+        assertMandatoryMethodAnnotations(ICommonServer.class, CommonServer.class,
                 "getLastModificationState: Transactional\n");
     }
 
     @Test
     public void testIETLLIMSService()
     {
-        assertMandatoryMethodAnnotations(IETLLIMSService.class);
+        assertMandatoryMethodAnnotations(IETLLIMSService.class, ETLService.class);
     }
 }