diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java
index 58030ca866ac7e2fa2af673ee2166950bcaf127f..7cd02d3234d73c73d0c9270faaeeda4f99e75e73 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java
@@ -75,10 +75,13 @@ public final class DefaultAccessController implements IAccessController
 
     private final CapabilityMap capabilities = new CapabilityMap(new File("etc/capabilities"));
 
+    private PredicateExecutor predicateExecutor;
+
     public DefaultAccessController(final IAuthorizationDAOFactory daoFactory)
     {
-        PredicateExecutor.setPredicateFactory(new PredicateFactory());
-        PredicateExecutor.setDAOFactory(daoFactory);
+        predicateExecutor = new PredicateExecutor();
+        predicateExecutor.setPredicateFactory(new PredicateFactory());
+        predicateExecutor.setDAOFactory(daoFactory);
     }
 
     public final static List<RoleWithIdentifier> getUserRoles(final PersonPE person)
@@ -179,7 +182,7 @@ public final class DefaultAccessController implements IAccessController
             {
                 for (final Argument<?> argument : arguments)
                 {
-                    final Status status = PredicateExecutor.evaluate(person, userRoles, argument);
+                    final Status status = predicateExecutor.evaluate(person, userRoles, argument);
                     if (status.getFlag().equals(StatusFlag.OK) == false)
                     {
                         return status;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java
index ef4b26416d022875b88ac5c29c9f8e6832c89d42..925b1a6706cd9b9a63e9d9d4c976273c352bc587 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java
@@ -36,52 +36,36 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
  */
 public final class PredicateExecutor
 {
-    private static IPredicateFactory predicateFactory;
+    private IPredicateFactory predicateFactory;
 
-    private static IAuthorizationDataProvider authorizationDataProvider;
-
-    private PredicateExecutor()
-    {
-        // Can not be instantiated.
-    }
+    private IAuthorizationDataProvider authorizationDataProvider;
 
     /**
-     * Statically sets the <code>IPredicateProvider</code> implementation.
+     * Sets the <code>IPredicateProvider</code> implementation.
      */
-    static final void setPredicateFactory(final IPredicateFactory predicateProvider)
+    final void setPredicateFactory(final IPredicateFactory predicateProvider)
     {
-        PredicateExecutor.predicateFactory = predicateProvider;
-    }
-
-    static final IPredicateFactory getPredicateFactory()
-    {
-        return predicateFactory;
+        predicateFactory = predicateProvider;
     }
 
     /**
-     * Statically sets the {@link IAuthorizationDAOFactory} implementation.
+     * Sets the {@link IAuthorizationDAOFactory} implementation.
      */
-    static final void setDAOFactory(final IAuthorizationDAOFactory daoFactory)
-    {
-        PredicateExecutor.authorizationDataProvider = new AuthorizationDataProvider(daoFactory);
-    }
-
-    static final IAuthorizationDataProvider getAuthorizationDataProvider()
+    final void setDAOFactory(final IAuthorizationDAOFactory daoFactory)
     {
-        return authorizationDataProvider;
+        authorizationDataProvider = new AuthorizationDataProvider(daoFactory);
     }
 
-    static final void setAuthorizationDataProvider(
-            IAuthorizationDataProvider authorizationDataProvider)
+    final void setAuthorizationDataProvider(IAuthorizationDataProvider authorizationDataProvider)
     {
-        PredicateExecutor.authorizationDataProvider = authorizationDataProvider;
+        this.authorizationDataProvider = authorizationDataProvider;
     }
 
     /**
      * Creates, casts and ensures that the returned {@link IPredicate} is not <code>null</code>.
      */
     @SuppressWarnings("unchecked")
-    private final static <T> IPredicate<T> createPredicate(
+    private final <T> IPredicate<T> createPredicate(
             final Class<? extends IPredicate<?>> predicateClass)
     {
         assert predicateFactory != null : "Unspecified predicate factory";
@@ -105,7 +89,7 @@ public final class PredicateExecutor
     /**
      * Finds out and executes the appropriate {@link IPredicate} for given <var>argument</var>.
      */
-    public final static <T> Status evaluate(final PersonPE person,
+    public final <T> Status evaluate(final PersonPE person,
             final List<RoleWithIdentifier> allowedRoles, final Argument<T> argument)
     {
         assert person != null : "Person unspecified";
@@ -124,10 +108,9 @@ public final class PredicateExecutor
     }
 
     @Private
-    final static <T> Status evaluate(final PersonPE person,
-            final List<RoleWithIdentifier> allowedRoles, final T argumentValue,
-            final Class<? extends IPredicate<?>> predicateClass, final Class<T> argumentType,
-            final boolean shouldFlattenCollections)
+    final <T> Status evaluate(final PersonPE person, final List<RoleWithIdentifier> allowedRoles,
+            final T argumentValue, final Class<? extends IPredicate<?>> predicateClass,
+            final Class<T> argumentType, final boolean shouldFlattenCollections)
     {
         assert authorizationDataProvider != null : "Authorization data provider not set";
         final IPredicate<T> predicate = createPredicate(predicateClass);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java
index a2e9a424cf2feda6fbf5edfebef474ef4b6e2e23..857ae5be7376c6f4f489d4730268d058e79bf279 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java
@@ -21,7 +21,6 @@ import java.util.Collections;
 import java.util.List;
 
 import org.jmock.Expectations;
-import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -57,9 +56,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
 
     private IDatabaseInstanceDAO dbInstanceDAO;
 
-    private IPredicateFactory previousFactory;
-
-    private IAuthorizationDataProvider previousProvider;
+    private PredicateExecutor predicateExecutor;
 
     private List<RoleWithIdentifier> createAllowedRoles()
     {
@@ -75,8 +72,8 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
         predicateFactory = context.mock(IPredicateFactory.class);
         daoFactory = context.mock(IAuthorizationDAOFactory.class);
         dbInstanceDAO = context.mock(IDatabaseInstanceDAO.class);
-        previousFactory = PredicateExecutor.getPredicateFactory();
-        PredicateExecutor.setPredicateFactory(predicateFactory);
+        predicateExecutor = new PredicateExecutor();
+        predicateExecutor.setPredicateFactory(predicateFactory);
         context.checking(new Expectations()
             {
                 {
@@ -88,8 +85,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
                     will(returnValue(Collections.EMPTY_LIST));
                 }
             });
-        previousProvider = PredicateExecutor.getAuthorizationDataProvider();
-        PredicateExecutor.setDAOFactory(daoFactory);
+        predicateExecutor.setDAOFactory(daoFactory);
     }
 
     /**
@@ -110,15 +106,6 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
         stringCollectionPredicate = context.mock(IPredicate.class);
     }
 
-    @Override
-    @AfterMethod
-    public void tearDown()
-    {
-        PredicateExecutor.setAuthorizationDataProvider(previousProvider);
-        PredicateExecutor.setPredicateFactory(previousFactory);
-        super.tearDown();
-    }
-
     @SuppressWarnings("unchecked")
     private final Class<? extends IPredicate<String>> castToStringPredicateClass()
     {
@@ -150,7 +137,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
                     will(returnValue(Status.OK));
                 }
             });
-        assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, value,
+        assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, value,
                 castToStringPredicateClass(), String.class, true));
         context.assertIsSatisfied();
     }
@@ -177,7 +164,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
                     will(returnValue(Status.OK));
                 }
             });
-        assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, array,
+        assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, array,
                 castToStringPredicateClass(), String[].class, true));
         context.assertIsSatisfied();
     }
@@ -204,7 +191,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
                     will(returnValue(Status.OK));
                 }
             });
-        assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, list,
+        assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, list,
                 castToStringPredicateClass(), List.class, true));
         context.assertIsSatisfied();
     }
@@ -230,7 +217,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase
                     will(returnValue(Status.OK));
                 }
             });
-        assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, list,
+        assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, list,
                 castToStringCollectionPredicateClass(), List.class, false));
         context.assertIsSatisfied();
     }