diff --git a/src/test/java/CollectionRewriteTest.java b/src/test/java/CollectionRewriteTest.java
index 19cea60..c1c88b1 100644
--- a/src/test/java/CollectionRewriteTest.java
+++ b/src/test/java/CollectionRewriteTest.java
@@ -12,6 +12,7 @@
  * @author hanl
  * @date 03/09/2015
  */
+// todo: 20.10.15
 public class CollectionRewriteTest {
 
     private static String simple_add_query = "[pos=ADJA]";
@@ -24,10 +25,10 @@
         config = BeanConfiguration.getBeans().getConfiguration();
     }
 
-//    @Test
+    //    @Test
     public void testCollectionNodeRemoveCorpusIdNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("textClass=politik & corpusID=WPD");
@@ -39,8 +40,8 @@
 
     //@Test
     public void testCollectionNodeRemoveAllCorpusIdNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("corpusID=BRZ13 & corpusID=WPD");
@@ -53,8 +54,8 @@
 
     //@Test
     public void testCollectionNodeRemoveGroupedCorpusIdNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection(
@@ -72,9 +73,9 @@
     //fixme: will probably fail when one doc groups are being refactored
     //@Test
     public void testCollectionCleanEmptyDocGroupNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
-        handler.add(new CollectionCleanupFilter());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
+        handler.add(CollectionCleanupFilter.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection(
@@ -92,9 +93,9 @@
 
     //@Test
     public void testCollectionCleanMoveOneDocFromGroupUpNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
-        handler.add(new CollectionCleanupFilter());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
+        handler.add(CollectionCleanupFilter.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection("(corpusID=BRZ13 & textClass=Wissenschaft)");
@@ -106,9 +107,9 @@
 
     //@Test
     public void testCollectionCleanEmptyGroupAndMoveOneFromGroupUpNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
-        handler.add(new CollectionCleanupFilter());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
+        handler.add(CollectionCleanupFilter.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection(
@@ -122,9 +123,9 @@
 
     //@Test
     public void testCollectionRemoveAndMoveOneFromGroupUpNoErrors() {
-        RewriteHandler handler = new RewriteHandler();
-        handler.add(new CollectionConstraint());
-        handler.add(new CollectionCleanupFilter());
+        RewriteHandler handler = new RewriteHandler(config);
+        handler.add(CollectionConstraint.class);
+        handler.add(CollectionCleanupFilter.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         s.setCollection(
diff --git a/src/test/java/FoundryRewriteTest.java b/src/test/java/FoundryRewriteTest.java
index 5a91a09..ff19ec2 100644
--- a/src/test/java/FoundryRewriteTest.java
+++ b/src/test/java/FoundryRewriteTest.java
@@ -32,8 +32,8 @@
 
     @Test
     public void testSimpleFoundryAddThrowsNoError() {
-        RewriteHandler processor = new RewriteHandler();
-        processor.add(new FoundryInject(config));
+        RewriteHandler processor = new RewriteHandler(config);
+        processor.add(FoundryInject.class);
         QuerySerializer s = new QuerySerializer();
         s.setQuery(simple_add_query, "poliqarp");
         String result = processor.apply(s.toJSON(), null);
@@ -57,9 +57,9 @@
     @Test
     public void testFoundryInjectPosNoErrors() {
         QuerySerializer s = new QuerySerializer();
-        RewriteHandler handler = new RewriteHandler();
+        RewriteHandler handler = new RewriteHandler(config);
         s.setQuery("[pos=ADJA]", "poliqarp");
-        handler.add(new FoundryInject(config));
+        assert handler.add(FoundryInject.class);
         String result = handler.apply(s.toJSON(), null);
         JsonNode node = JsonUtils.readTree(result);
 
@@ -73,9 +73,9 @@
     @Test
     public void testFoundryInjectJoinedQueryNoErrors() {
         QuerySerializer s = new QuerySerializer();
-        RewriteHandler handler = new RewriteHandler();
+        RewriteHandler handler = new RewriteHandler(config);
         s.setQuery("[orth=laufe/i & base!=Lauf]", "poliqarp");
-        handler.add(new FoundryInject(config));
+        assert handler.add(FoundryInject.class);
         String result = handler.apply(s.toJSON(), null);
         JsonNode node = JsonUtils.readTree(result);
 
@@ -90,9 +90,9 @@
     @Test
     public void testFoundryInjectGroupedQueryNoErrors() {
         QuerySerializer s = new QuerySerializer();
-        RewriteHandler handler = new RewriteHandler();
+        RewriteHandler handler = new RewriteHandler(config);
         s.setQuery("[(base=laufen | base=gehen) & tt/pos=VVFIN]", "poliqarp");
-        handler.add(new FoundryInject(config));
+        assert handler.add(FoundryInject.class);
         String result = handler.apply(s.toJSON(), null);
         JsonNode node = JsonUtils.readTree(result);
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
index 3040814..fb7eaa7 100644
--- a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
+++ b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
@@ -19,8 +19,9 @@
     private static final String[] credentials = new String[] { "test1",
             "testPass#2015" };
 
-    public static void setup() {
-        if (BeanConfiguration.hasContext()) {
+    public static boolean setup() {
+        boolean r = BeanConfiguration.hasContext();
+        if (r) {
             EntityHandlerIface dao = BeanConfiguration.getBeans()
                     .getUserDBHandler();
 
@@ -32,8 +33,10 @@
                 dao.createAccount(user);
             }catch (KustvaktException e) {
                 e.printStackTrace();
+                return false;
             }
         }
+        return r;
     }
 
     public static final String[] getCredentials() {
