diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java b/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
index 0a066e5e45bcd94868043dd230cb134562570e1c..a420075db1438f96395ebd0b14766e48ea05b775 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/ClassFilterUtils.java
@@ -57,5 +57,11 @@ public final class ClassFilterUtils
         {
             return true;
         }
+
+        @Override
+        public boolean accept(String fullyQualifiedClassName)
+        {
+            return true;
+        }
     }
 }
diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java b/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
index 99612c6bfb98e5b32814a4c17002a9bb45352bc9..025d80e77d3eac5c581c0342b48562a9ac5c860b 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/ClassUtils.java
@@ -421,11 +421,14 @@ public final class ClassUtils
             {
                 try
                 {
-                    final Class<?> clazz =
-                            org.apache.commons.lang.ClassUtils.getClass(className, false);
-                    if (classFilter.accept(clazz))
+                    if (classFilter.accept(className))
                     {
-                        classes.add(clazz);
+                        final Class<?> clazz =
+                                org.apache.commons.lang.ClassUtils.getClass(className, false);
+                        if (classFilter.accept(clazz))
+                        {
+                            classes.add(clazz);
+                        }
                     }
                 } catch (final ClassNotFoundException ex)
                 {
diff --git a/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java b/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
index 387076b43ba2b2de8ad55f6771581161aec708ee..0e39c6a0acf87555eaf40efd627b794a1c9acf48 100644
--- a/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
+++ b/common/source/java/ch/systemsx/cisd/common/reflection/IClassFilter.java
@@ -27,4 +27,12 @@ public interface IClassFilter
      * Tests whether or not the specified <var>clazz</var> should be included.
      */
     public boolean accept(final Class<?> clazz);
+    
+    /**
+     * Returns <code>true</code> if the specified class is accepted. This method is call before
+     * {@link #accept(Class)}. It should return <code>false</code> if the class can not be loaded.
+     * If <code>true</code> is returned also {@link #accept(Class)} will be invoked which will give
+     * the definite answer.
+     */
+    public boolean accept(String fullyQualifiedClassName);
 }
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
index 53210f408716645d40053d73b83621abd6d9d270..1d15f8088b7e1c6640a2ceb093fbe7d01a761d9f 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/reflection/ClassUtilsTest.java
@@ -258,6 +258,12 @@ public final class ClassUtilsTest
                 {
                     return clazz.equals(SuiteSlave.class) == false;
                 }
+
+                @Override
+                public boolean accept(String fullyQualifiedClassName)
+                {
+                    return true;
+                }
             });
         assertTrue(classes.size() > 0);
         assertFalse(classes.contains(Test.class));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
index 9e439256f2df43e860dd24bf465ef9fd5d2ede54..f14b2c4056bcb250c364bdfb0a53f3e92c1511b3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/search/PackageBasedIndexedEntityFinder.java
@@ -26,7 +26,8 @@ import ch.systemsx.cisd.common.reflection.ClassUtils;
 import ch.systemsx.cisd.common.reflection.IClassFilter;
 
 /**
- * A {@link IIndexedEntityFinder} based on a package name specified in the constructor.
+ * A {@link IIndexedEntityFinder} based on a package name specified in the constructor. Classes
+ * ending with <code>Test</code> will be ignored.
  * <p>
  * This does not work recursively and expects to find all the correctly annotated classes in the
  * given package.
@@ -53,6 +54,12 @@ public final class PackageBasedIndexedEntityFinder implements IIndexedEntityFind
                 // IClassFilter
                 //
 
+                @Override
+                public boolean accept(String fullyQualifiedClassName)
+                {
+                    return fullyQualifiedClassName.endsWith("Test") == false;
+                }
+
                 @Override
                 public final boolean accept(final Class<?> clazz)
                 {