diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 7cd0ecf..01bf704 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -82,7 +82,7 @@
         maxhits = new Integer(properties.getProperty("maxhits", "50000"));
         returnhits = new Integer(properties.getProperty("returnhits", "50000"));
         indexDir = properties.getProperty("lucene.indexDir", "");
-        port = new Integer(properties.getProperty("server.port", "8080"));
+        port = new Integer(properties.getProperty("server.port", "8095"));
         // server options
         serverHost = String
                 .valueOf(properties.getProperty("server.host", "localhost"));
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
index fe192db..99edf0e 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
@@ -41,20 +41,22 @@
     public Document findbyId(Integer id, User user) throws KustvaktException {
         MapSqlParameterSource s = new MapSqlParameterSource();
         s.addValue("id", id);
-        String sql = "select * from doc_store where id=:id";
+        String sql = "select id, persistent_id, disabled, strftime('%s', created) as created from doc_store where id=:id";
         try {
             return this.jdbcTemplate
                     .query(sql, s, new ResultSetExtractor<Document>() {
                         @Override
                         public Document extractData(ResultSet rs)
                                 throws SQLException, DataAccessException {
-                            Document doc = new Document(
-                                    rs.getString("persistent_id"));
-                            doc.setId(rs.getInt("id"));
-                            doc.setCreated(
-                                    rs.getTimestamp("created").getTime());
-                            doc.setDisabled(rs.getBoolean("disabled"));
-                            return doc;
+                            if (rs.isFirst()) {
+                                Document doc = new Document(
+                                        rs.getString("persistent_id"));
+                                doc.setId(rs.getInt("id"));
+                                doc.setCreated(rs.getLong("created"));
+                                doc.setDisabled(rs.getBoolean("disabled"));
+                                return doc;
+                            }
+                            return null;
                         }
                     });
         }catch (DataAccessException e) {
@@ -67,7 +69,7 @@
     public Document findbyId(String id, User user) throws KustvaktException {
         MapSqlParameterSource s = new MapSqlParameterSource();
         s.addValue("id", id);
-        String sql = "select id, persistent_id, strftime('%s', created) as created from doc_store where persistent_id=:id";
+        String sql = "select id, persistent_id, disabled, strftime('%s', created) as created from doc_store where persistent_id=:id";
 
         try {
             return this.jdbcTemplate
@@ -75,16 +77,18 @@
                         @Override
                         public Document extractData(ResultSet rs)
                                 throws SQLException, DataAccessException {
-                            Document doc = new Document(
-                                    rs.getString("persistent_id"));
-                            doc.setId(rs.getInt("id"));
-                            doc.setCreated(rs.getLong("created"));
-                            doc.setDisabled(rs.getBoolean("disabled"));
-                            return doc;
+                            if (!rs.isClosed()) {
+                                Document doc = new Document(
+                                        rs.getString("persistent_id"));
+                                doc.setId(rs.getInt("id"));
+                                doc.setCreated(rs.getLong("created"));
+                                doc.setDisabled(rs.getBoolean("disabled"));
+                                return doc;
+                            }
+                            return null;
                         }
                     });
         }catch (DataAccessException e) {
-            e.printStackTrace();
             throw new KustvaktException(StatusCodes.CONNECTION_ERROR);
         }
     }
@@ -124,12 +128,16 @@
                         @Override
                         public Document mapRow(ResultSet rs, int rowNum)
                                 throws SQLException {
-                            Document doc = new Document(
-                                    rs.getString("persistent_id"));
-                            doc.setId(rs.getInt("id"));
-                            doc.setCreated(rs.getLong("created"));
-                            doc.setDisabled(rs.getBoolean("disabled"));
-                            return doc;
+                            // todo: test on empty/closed resultset!
+                            if (!rs.isClosed()) {
+                                Document doc = new Document(
+                                        rs.getString("persistent_id"));
+                                doc.setId(rs.getInt("id"));
+                                doc.setCreated(rs.getLong("created"));
+                                doc.setDisabled(rs.getBoolean("disabled"));
+                                return doc;
+                            }
+                            return null;
                         }
                     });
         }catch (DataAccessException e) {
@@ -163,7 +171,6 @@
         try {
             return this.jdbcTemplate.update(sql, s);
         }catch (DataAccessException e) {
-            e.printStackTrace();
             throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT,
                     "illegal argument given", resource.getPersistentID());
         }
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java b/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
index cbc102d..bf3ab79 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
@@ -45,6 +45,9 @@
     @Override
     public UserSettings getUserSettings(Integer userid)
             throws KustvaktException {
+//        TransactionDefinition def = new DefaultTransactionDefinition();
+//        TransactionStatus status = transactionManager.getTransaction(def);
+
         MapSqlParameterSource np = new MapSqlParameterSource();
         np.addValue("us", userid);
         final String sql =
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
index 079af47..d5896e7 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
@@ -1,6 +1,13 @@
 package de.ids_mannheim.korap.resource.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import de.ids_mannheim.korap.config.BeanConfiguration;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.DocumentDao;
+import de.ids_mannheim.korap.resources.Document;
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.CacheManager;
+import net.sf.ehcache.Element;
 
 /**
  * @author hanl
@@ -8,15 +15,41 @@
  */
 public class DocMatchRewrite implements RewriteTask.RewriteAfter {
 
+    private DocumentDao docDao;
+    private Cache cache;
 
+    // todo: cache already matched documents with ehcache!
+
+    public DocMatchRewrite() {
+        this.docDao = new DocumentDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        this.cache = CacheManager.getInstance().getCache("documents");
+    }
 
     @Override
     public JsonNode postProcess(KoralNode node) {
+        Document doc = null;
 
+        // todo: check matches for parent
+        if (node.has("docID")) {
+            String docID = node.get("docID");
+            Element e = this.cache.get(docID);
+            if (e == null) {
+                try {
+                    doc = docDao.findbyId(docID, null);
+                }catch (KustvaktException ex) {
+                    ex.printStackTrace();
+                    // todo: what to do here?!
+                }
 
+                if (doc != null)
+                    this.cache.put(new Element(docID, doc));
+            }else
+                doc = (Document) e.getObjectValue();
 
-
-
-        return null;
+            if (doc != null && doc.isDisabled())
+                node.removeNode();
+        }
+        return node.rawNode();
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
index 017de70..585d0bf 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/KoralNode.java
@@ -30,6 +30,7 @@
         };
     }
 
+    @Deprecated
     public boolean setNode(Object path) {
         JsonNode n = null;
         if (this.node.isObject() && this.node.has((String) path))
@@ -91,6 +92,10 @@
         return null;
     }
 
+    public JsonNode at(String name) {
+        return this.node.at(name);
+    }
+
     public boolean has(Object ident) {
         if (ident instanceof String)
             return this.node.has((String) ident);
@@ -99,6 +104,7 @@
         return false;
     }
 
+
     public JsonNode rawNode() {
         return this.node;
     }
@@ -107,7 +113,7 @@
         this.remove = true;
     }
 
-    public boolean toRemove() {
+    public boolean isRemove() {
         return this.remove;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 49cef0c..8be0799 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -12,6 +12,7 @@
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 /**
  * @author hanl
@@ -26,6 +27,8 @@
     private Collection<RewriteTask.RewriteKoralToken> token_node_processors;
     private Collection<RewriteTask.RewriteQuery> query_processors;
 
+    private Set<Class> failed_task_registration;
+
     private KustvaktConfiguration config;
 
     // fixme: make default constructor with configuration!
@@ -34,6 +37,7 @@
         this.node_processors = new HashSet<>();
         this.token_node_processors = new HashSet<>();
         this.query_processors = new HashSet<>();
+        this.failed_task_registration = new HashSet<>();
     }
 
     public boolean addProcessor(RewriteTask rewriter) {
@@ -46,12 +50,15 @@
         else if (rewriter instanceof RewriteTask.RewriteBefore
                 | rewriter instanceof RewriteTask.RewriteAfter)
             return this.node_processors.add(rewriter);
-        //        else if (rewriter instanceof RewriteTask.RewriteAfter)
-        //            return this.node_post_processors
-        //                    .add((RewriteTask.RewriteAfter) rewriter);
+
+        this.failed_task_registration.add(rewriter.getClass());
         return false;
     }
 
+    public final Collection<Class> getFailedHandlers() {
+        return this.failed_task_registration;
+    }
+
     @Override
     public String toString() {
         StringBuilder b = new StringBuilder();
@@ -78,6 +85,7 @@
             task = (RewriteTask) c.newInstance();
         }catch (NoSuchMethodException | InvocationTargetException
                 | IllegalAccessException | InstantiationException e) {
+            this.failed_task_registration.add(rewriter);
             return false;
         }
         return addProcessor(task);
@@ -111,13 +119,11 @@
                         this.node_processors, post);
             }
         }else if (root.isArray()) {
-            //todo: test!
             Iterator<JsonNode> it = root.elements();
             while (it.hasNext()) {
                 JsonNode n = it.next();
-                if (process(n, user, post)) {
+                if (process(n, user, post))
                     it.remove();
-                }
             }
         }
         return false;
@@ -168,10 +174,10 @@
                         .preProcess(node, this.config, user);
             if (post && task instanceof RewriteTask.RewriteAfter)
                 ((RewriteTask.RewriteAfter) task).postProcess(node);
-            if (node.toRemove())
+            if (node.isRemove())
                 break;
         }
-        return node.toRemove();
+        return node.isRemove();
     }
 
 }
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
index 78d0a44..c3e3cee 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
@@ -58,7 +58,6 @@
         } catch (EmptyResultException e) {
             throw new NotAuthorizedException(StatusCodes.PERMISSION_DENIED);
         }
-
         return p.getResource();
     }
 
diff --git a/src/main/resources/default-config.xml b/src/main/resources/default-config.xml
index 4117b76..3f9f6a6 100644
--- a/src/main/resources/default-config.xml
+++ b/src/main/resources/default-config.xml
@@ -61,20 +61,21 @@
     </bean>
 
     <!--class="org.apache.commons.dbcp2.BasicDataSource"-->
+    <!-- org.springframework.jdbc.datasource.SingleConnectionDataSource -->
     <bean id="dataSource"
-          class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
+          class="org.apache.commons.dbcp2.BasicDataSource"
           lazy-init="true">
         <property name="driverClassName" value="${jdbc.driverClassName}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
         <property name="password" value="${jdbc.password}"/>
         <!-- relevant for single connection datasource and sqlite -->
-        <property name="suppressClose">
-            <value>true</value>
-        </property>
-        <!--<property name="initialSize" value="1"/>-->
-        <!--<property name="maxIdle" value="1"/>-->
-        <!--<property name="poolPreparedStatements" value="true"/>-->
+        <!--<property name="suppressClose">-->
+        <!--<value>true</value>-->
+        <!--</property>-->
+        <property name="initialSize" value="2"/>
+        <property name="maxIdle" value="2"/>
+        <property name="poolPreparedStatements" value="true"/>
     </bean>
 
     <!-- to configure database for sqlite, mysql, etc. migrations -->
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
index 3265324..34f478c 100644
--- a/src/main/resources/ehcache.xml
+++ b/src/main/resources/ehcache.xml
@@ -2,6 +2,12 @@
          xsi:noNamespaceSchemaLocation='http://ehcache.org/ehcache.xsd'>
     <defaultCache eternal='true' overflowToDisk='false'/>
     <!--maxBytesLocalHeap="200M"-->
+    <cache name="documents"
+           timeToIdleSeconds="172800"
+           eternal='false'
+           memoryStoreEvictionPolicy="LRU"
+           maxEntriesLocalHeap="2000"
+           overflowToDisk='false'/>
     <cache name='users'
            timeToIdleSeconds="172800"
            eternal='false'
diff --git a/src/test/java/CollectionRewriteTest.java b/src/test/java/CollectionRewriteTest.java
index 995cdf7..60aff50 100644
--- a/src/test/java/CollectionRewriteTest.java
+++ b/src/test/java/CollectionRewriteTest.java
@@ -27,7 +27,7 @@
 
     @BeforeClass
     public static void init() {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
+        BeanConfiguration.loadClasspathContext("test-config.xml");
         config = BeanConfiguration.getBeans().getConfiguration();
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java b/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java
index 94ff6a2..f149b6c 100644
--- a/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/ClassLoaderTest.java
@@ -20,7 +20,7 @@
 
     @Test
     public void testBeanConfigurationLoaderThrowsNoException() {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
+        BeanConfiguration.loadClasspathContext("test-config.xml");
         assert BeanConfiguration.hasContext();
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
index 2c11019..d098502 100644
--- a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
@@ -51,7 +51,7 @@
 
     @Test(expected = KustvaktException.class)
     public void testBeanOverrideInjection() throws KustvaktException {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
+        BeanConfiguration.loadClasspathContext("test-config.xml");
 
         BeanConfiguration.getBeans().getConfiguration().setPropertiesAsStream(
                 ConfigTest.class.getClassLoader()
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/KustvaktCoreRestTest.java b/src/test/java/de/ids_mannheim/korap/web/service/KustvaktCoreRestTest.java
index 7af97ea..d8bf7df 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/KustvaktCoreRestTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/KustvaktCoreRestTest.java
@@ -16,6 +16,7 @@
  * @author hanl
  * @date 26/06/2015
  */
+//todo: check tranferable index config path for test cases
 public class KustvaktCoreRestTest extends FastJerseyTest {
 
     @BeforeClass
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
index 560d66a..847b875 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
@@ -22,7 +22,7 @@
 
     @BeforeClass
     public static void configure() {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
+        BeanConfiguration.loadClasspathContext("test-config.xml");
         setPackages("de.ids_mannheim.korap.web.service",
                 "de.ids_mannheim.korap.web.filter",
                 "de.ids_mannheim.korap.web.utils");
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
index f0d3d2a..f0411f7 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
@@ -29,7 +29,7 @@
 
     @BeforeClass
     public static void setup() throws KustvaktException {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
+        BeanConfiguration.loadClasspathContext("test-config.xml");
         handler = new OAuth2Handler(
                 BeanConfiguration.getBeans().getPersistenceClient());
         crypto = BeanConfiguration.getBeans().getEncryption();
