Assembled lite version.

Change-Id: I48e60fffd9219a97923e7c388f4f97bcda416d3f
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 0000000..26765dd
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,449 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>de.ids_mannheim.korap</groupId>
+	<artifactId>Kustvakt-core</artifactId>
+	<version>0.59.8</version>
+
+	<properties>
+		<java.version>1.7</java.version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<spring-framework.version>4.3.7.RELEASE</spring-framework.version>
+		<jersey.version>1.19.4</jersey.version>
+	</properties>
+	<build>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+				<filtering>true</filtering>
+				<includes>
+					<include>**/*.info</include>
+					<include>**/*.xml</include>
+					<include>**/*.conf</include>
+					<include>**/*.kustvakt</include>
+					<include>**/*.properties</include>
+					<include>**/*.sql</include>
+				</includes>
+			</resource>
+		</resources>
+		<testResources>
+			<testResource>
+				<directory>src/test/resources</directory>
+				<filtering>true</filtering>
+				<includes>
+					<include>**/*.prop</include>
+					<include>**/*.xml</include>
+					<include>**/*.conf</include>
+					<include>**/*.info</include>
+					<include>**/*.properties</include>
+				</includes>
+			</testResource>
+			<testResource>
+				<directory>src/main/resources</directory>
+				<filtering>true</filtering>
+				<includes>
+					<include>**/*.info</include>
+					<include>**/*.properties</include>
+				</includes>
+			</testResource>
+		</testResources>
+		<plugins>
+			<!-- Formatter plugin for Eclipse based coding conventions http://maven-java-formatter-plugin.googlecode.com/svn/site/0.4/usage.html -->
+			<plugin>
+				<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
+				<artifactId>maven-java-formatter-plugin</artifactId>
+				<version>0.4</version>
+				<configuration>
+					<configFile>${project.basedir}/Format.xml</configFile>
+					<overrideConfigCompilerVersion>true</overrideConfigCompilerVersion>
+					<compilerSource>1.7</compilerSource>
+					<compilerCompliance>1.7</compilerCompliance>
+					<compilerTargetPlatform>1.7</compilerTargetPlatform>
+				</configuration>
+				<!-- <executions> <execution> <goals> <goal>format</goal> </goals> </execution> 
+					</executions> -->
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.3</version>
+				<configuration>
+					<compilerVersion>${java.version}</compilerVersion>
+					<source>${java.version}</source>
+					<target>${java.version}</target>
+				</configuration>
+			</plugin>
+
+			<!-- build tests jar, so extensions can use fastjerseytest class to build 
+				rest tests -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>2.1</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.19.1</version>
+				 
+				<configuration>
+					<reuseForks>false</reuseForks>
+					<forkCount>2</forkCount>
+					<threadCount>10</threadCount>
+					<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
+
+					<excludes>
+						<exclude>**/*APITest.java</exclude>
+						<exclude>de/ids_mannheim/korap/suites/*.java</exclude>
+						<exclude>**/KustvaktServerTest.java</exclude>
+						<exclude>**/ResourceServiceTest.java</exclude>
+						<exclude>**/ResourceInfoServiceTest.java</exclude>
+						<exclude>**/PolicyServiceTest.java</exclude>
+					</excludes>
+					<includes>
+						<include>de/ids_mannheim/korap/**/*.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.1</version>
+				<executions>
+					<!-- option 1 -->
+					<execution>
+						<id>full</id>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<finalName>Kustvakt-${project.version}}-core</finalName>
+							<transformers>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass> de.ids_mannheim.korap.web.KustvaktServer </mainClass>
+								</transformer>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+									<resource>META-INF/spring.handlers </resource>
+								</transformer>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+									<resource>META-INF/spring.schemas </resource>
+								</transformer>
+							</transformers>
+							<!-- Additional configuration. apparently there is a securityException -->
+							<filters>
+								<filter>
+									<artifact>*:*</artifact>
+									<excludes>
+										<exclude>META-INF/*.SF</exclude>
+										<exclude>META-INF/*.DSA </exclude>
+										<exclude>META-INF/*.RSA </exclude>
+									</excludes>
+								</filter>
+							</filters>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-bundle</artifactId>
+			<version>${jersey.version}</version>
+		</dependency>
+		<!--EM: added -->
+		<dependency>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-server</artifactId>
+			<version>${jersey.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.sun.jersey.contribs</groupId>
+			<artifactId>jersey-spring</artifactId>
+			<version>${jersey.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring-core</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring-web</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring-beans</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring-context</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework</groupId>
+					<artifactId>spring-aop</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!-- EM:done -->
+		<dependency>
+			<groupId>com.sun.jersey.jersey-test-framework</groupId>
+			<artifactId>jersey-test-framework-core</artifactId>
+			<version>${jersey.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.sun.jersey.jersey-test-framework</groupId>
+			<artifactId>jersey-test-framework-grizzly</artifactId>
+			<version>${jersey.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<!-- <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> 
+			<version>1.7.5</version> </dependency> -->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-log4j12</artifactId>
+			<version>1.7.5</version>
+		</dependency>
+		<!-- <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> 
+			<version>1.2.17</version> </dependency> <dependency> <groupId>log4j</groupId> 
+			<artifactId>apache-log4j-extras</artifactId> <version>1.2.17</version> </dependency> -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>1.16.6</version>
+		</dependency>
+		<dependency>
+			<groupId>joda-time</groupId>
+			<artifactId>joda-time</artifactId>
+			<version>2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>de.ids_mannheim.korap</groupId>
+			<artifactId>Koral</artifactId>
+			<version>0.27</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.eclipse.jetty</groupId>
+					<artifactId>jetty-servlet</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<dependency>
+			<groupId>org.xerial</groupId>
+			<artifactId>sqlite-jdbc</artifactId>
+			<version>3.8.10.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-dbcp2</artifactId>
+			<version>2.1.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-validator</groupId>
+			<artifactId>commons-validator</artifactId>
+			<version>1.4.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.mindrot</groupId>
+			<artifactId>jbcrypt</artifactId>
+			<version>0.3m</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.nimbusds</groupId>
+			<artifactId>nimbus-jose-jwt</artifactId>
+			<version>2.10.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.ids_mannheim.korap</groupId>
+			<artifactId>Krill</artifactId>
+			<version>0.55.9</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.xerial</groupId>
+					<artifactId>sqlite-jdbc</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.reflections</groupId>
+			<artifactId>reflections</artifactId>
+			<version>0.9.9-RC1</version>
+		</dependency>
+
+
+
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-core</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-web</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-asm</artifactId>
+			<version>3.1.4.RELEASE</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-orm</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<!-- EM: done -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context-support</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-test</artifactId>
+			<version>${spring-framework.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- apparently this order prevents the spring schemas from being overriden 
+			in META-INF/spring.schemas, thus must stay like this -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-aop</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-aspects</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+
+		<!-- copied from extension -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-jdbc</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-tx</artifactId>
+			<version>${spring-framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.flywaydb</groupId>
+			<artifactId>flyway-core</artifactId>
+			<version>4.0</version>
+		</dependency>
+
+		<!-- <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> 
+			<version>2.6.5</version> </dependency> -->
+
+		<dependency>
+			<groupId>org.apache.oltu.oauth2</groupId>
+			<artifactId>org.apache.oltu.oauth2.authzserver</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
+		<!-- end copy -->
+
+		<dependency>
+			<groupId>commons-collections</groupId>
+			<artifactId>commons-collections</artifactId>
+			<version>3.2.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.jetty</groupId>
+			<artifactId>jetty-server</artifactId>
+			<version>8.1.8.v20121106</version>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.jetty</groupId>
+			<artifactId>jetty-servlet</artifactId>
+			<version>8.1.8.v20121106</version>
+		</dependency>
+		<dependency>
+			<groupId>asm</groupId>
+			<artifactId>asm</artifactId>
+			<version>3.3.1</version>
+		</dependency>
+		<dependency>
+			<groupId>com.novell.ldap</groupId>
+			<artifactId>jldap</artifactId>
+			<version>4.3</version>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/com.unboundid/unboundid-ldapsdk -->
+		<dependency>
+			<groupId>com.unboundid</groupId>
+			<artifactId>unboundid-ldapsdk</artifactId>
+			<version>3.2.1</version>
+		</dependency>
+
+		<!-- not part of public release <dependency> <groupId>KorAP-graphDB</groupId> 
+			<artifactId>KorAP-graphDB</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> 
+			<exclusion> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> 
+			</exclusion> <exclusion> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> 
+			</exclusion> <exclusion> <groupId>org.glassfish.jersey.containers</groupId> 
+			<artifactId>jersey-container-grizzly2-http</artifactId> </exclusion> <exclusion> 
+			<groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-common</artifactId> 
+			</exclusion> <exclusion> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> 
+			</exclusion> </exclusions> </dependency> -->
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.3.3</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.4</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-ehcache</artifactId>
+			<version>5.1.8.Final</version>
+		</dependency>
+	</dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 6c100ab..ae25ae1 100644
--- a/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -1,25 +1,27 @@
 package de.ids_mannheim.korap.config;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Pattern;
+
+import org.apache.log4j.PropertyConfigurator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.utils.TimeUtils;
 import lombok.Getter;
-import org.apache.log4j.PropertyConfigurator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-import java.util.regex.Pattern;
 
 /**
  * if configuration class is extended, loadSubTypes method should be
@@ -92,7 +94,10 @@
 
 	private String ldapConfig;
 
-
+	public KustvaktConfiguration (Properties properties) throws IOException {
+        load(properties);
+    }
+	
     /**
      * loading of the properties and mapping to parameter variables
      * 
@@ -228,9 +233,9 @@
      * @param props
      * @throws IOException 
      */
-    public void setProperties (Properties props) throws IOException {
-        this.load(props);
-    }
+//    public void setProperties (Properties props) throws IOException {
+//        this.load(props);
+//    }
 
 
     /**
diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/DatabaseException.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/DatabaseException.java
index 702bf4b..26190cc 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/DatabaseException.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/DatabaseException.java
@@ -11,14 +11,18 @@
 public class DatabaseException extends KustvaktException {
 
     private DatabaseException (Object userid, Integer status, String message,
-                         String args) {
-        super(String.valueOf(userid), status, message, args);
+                         String args, Exception e) {
+        super(String.valueOf(userid), status, message, args, e);
     }
 
-
     public DatabaseException (Object userid, String target, Integer status, String message,
+            String ... args) {
+        this(null, userid, target, status, message);
+    }
+
+    public DatabaseException (Exception e, Object userid, String target, Integer status, String message,
                         String ... args) {
-        this(userid, status, message, Arrays.asList(args).toString());
+        this(userid, status, message, Arrays.asList(args).toString(), e);
         AuditRecord record = new AuditRecord(AuditRecord.CATEGORY.DATABASE);
         record.setUserid(String.valueOf(userid));
         record.setStatus(status);
@@ -29,7 +33,7 @@
 
 
     public DatabaseException (KustvaktException e, Integer status, String ... args) {
-        this(e.getUserid(), e.getStatusCode(), e.getMessage(), e.getEntity());
+        this(e.getUserid(), e.getStatusCode(), e.getMessage(), e.getEntity(), e);
         AuditRecord record = AuditRecord.dbRecord(e.getUserid(), status, args);
         record.setField_1(e.string());
         this.records.addAll(e.getRecords());
diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
index bdbe010..696d34f 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
@@ -38,10 +38,14 @@
         this.userid = String.valueOf(userid);
     }
 
+    public KustvaktException (Object userid, int status, String message,
+            String entity) {
+        this(userid, status, message, entity, null);
+    }
 
     public KustvaktException (Object userid, int status, String message,
-                              String entity) {
-        super(message);
+                              String entity, Exception e) {
+        super(message, e);
         this.statusCode = status;
         this.entity = entity;
         this.userid = String.valueOf(userid);
diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/WrappedException.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/WrappedException.java
index 3e067a7..534419a 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/WrappedException.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/WrappedException.java
@@ -13,13 +13,13 @@
 public class WrappedException extends KustvaktException {
 
     private WrappedException (Object userid, Integer status, String message,
-                              String args) {
-        super(String.valueOf(userid), status, message, args);
+                              String args, Exception rootCause) {
+        super(String.valueOf(userid), status, message, args, rootCause);
     }
 
 
     public WrappedException (Object userid, Integer status, String ... args) {
-        this(userid, status, "", Arrays.asList(args).toString());
+        this(userid, status, "", Arrays.asList(args).toString(), null);
         AuditRecord record = AuditRecord.serviceRecord(userid, status, args);
         this.records.add(record);
     }
@@ -27,7 +27,7 @@
 
     public WrappedException (KustvaktException e, Integer status,
                              String ... args) {
-        this(e.getUserid(), e.getStatusCode(), e.getMessage(), e.getEntity());
+        this(e.getUserid(), e.getStatusCode(), e.getMessage(), e.getEntity(), e);
         AuditRecord record = AuditRecord.serviceRecord(e.getUserid(), status,
                 args);
         record.setField_1(e.string());
diff --git a/core/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/core/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 7a3308f..89f9bdd 100644
--- a/core/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/core/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -49,11 +49,12 @@
         this.query_processors = new HashSet<>();
         this.failed_task_registration = new HashSet<>();
         this.beans = null;
+        this.add(FoundryInject.class);
     }
 
 
     public void defaultRewriteConstraints () {
-        this.add(FoundryInject.class);
+//        this.add(FoundryInject.class);
         //this.add(PublicCollection.class);
         this.add(CollectionRewrite.class);
         this.add(IdWriter.class);
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index 4ef0d7a..92be0ef 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -30,25 +30,6 @@
     }
 
 
-    public static void main (String[] args) throws Exception {
-        KustvaktBaseServer server = new KustvaktBaseServer() {
-            @Override
-            protected void setup () {}
-        };
-        kargs = server.readAttributes(args);
-
-        if (kargs.config != null)
-            BeansFactory.loadFileContext(kargs.config);
-        else
-            BeansFactory.loadClasspathContext();
-
-        kargs.setRootPackages(new String[] { "de.ids_mannheim.korap.web.service.light" });
-        rootPackages = "de.ids_mannheim.korap.web.service.light";
-        
-        server.start();
-    }
-
-
     protected KustvaktArgs readAttributes (String[] args) {
         KustvaktArgs kargs = new KustvaktArgs();
         for (int i = 0; i < args.length; i++) {
@@ -94,7 +75,7 @@
         ServletContextHandler contextHandler = new ServletContextHandler(
                 ServletContextHandler.NO_SESSIONS);
         contextHandler.setContextPath("/");
-        contextHandler.setInitParameter("contextConfigLocation", "classpath:default-config.xml");
+        contextHandler.setInitParameter("contextConfigLocation", "classpath:"+kargs.getConfig());
         
         ServletContextListener listener = new ContextLoaderListener();
         contextHandler.addEventListener(listener);
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java b/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
index eca0a23..3e7095c 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
@@ -5,6 +5,7 @@
 import java.io.IOException;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Properties;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -36,7 +37,7 @@
     String i = "/Users/hanl/Projects/prep_corpus";
     String klinux10 = "/vol/work/hanl/indices";
     private KrillIndex index;
-
+    
     /**
      * Constructor
      */
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java b/core/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
index bfd12f9..377efaa 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
@@ -5,6 +5,8 @@
 
 import javax.ws.rs.ext.Provider;
 
+import org.springframework.beans.factory.annotation.Autowired;
+
 import com.sun.jersey.spi.container.ContainerRequest;
 import com.sun.jersey.spi.container.ContainerRequestFilter;
 import com.sun.jersey.spi.container.ContainerResponseFilter;
@@ -28,8 +30,8 @@
 @Provider
 public class AdminFilter implements ContainerRequestFilter, ResourceFilter {
 
-	private static AuthenticationManagerIface authManager = BeansFactory.getKustvaktContext()
-			.getAuthenticationManager();
+    @Autowired
+	private AuthenticationManagerIface authManager;
 
 	@Override
 	public ContainerRequest filter(ContainerRequest cr) {
diff --git a/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java b/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java
new file mode 100644
index 0000000..76db69e
--- /dev/null
+++ b/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java
@@ -0,0 +1,39 @@
+package de.ids_mannheim.korap.config;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class AppTestConfigBase {
+
+    private static String mainConfigurationFile = "kustvakt-test.conf";
+
+    @Bean(name = ContextHolder.KUSTVAKT_CONFIG)
+    public KustvaktConfiguration getConfig () {
+        
+        KustvaktConfiguration c = null;
+        
+        InputStream s = ConfigLoader.loadConfigStream(mainConfigurationFile);
+        
+        if (s != null){
+            Properties p = new Properties();
+            try {
+                p.load(s);
+                c = new KustvaktConfiguration(p);
+            }
+            catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        else {
+            System.out.println("No properties found!");
+            System.exit(-1);
+        }
+        return c;
+    }
+
+}
diff --git a/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java b/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
new file mode 100644
index 0000000..d7be3d1
--- /dev/null
+++ b/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
@@ -0,0 +1,100 @@
+package de.ids_mannheim.korap.config;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.log4j.Logger;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.model.InitializationError;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import net.jcip.annotations.NotThreadSafe;
+
+/**
+ * @author hanl
+ * @date 09/03/2016
+ */
+@NotThreadSafe
+@RunWith(BeanConfigBaseTest.SpringExtendedSetupListener.class)
+@ContextConfiguration(classes = AppTestConfigBase.class)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+public abstract class BeanConfigBaseTest {
+
+    private static Logger jlog = Logger.getLogger(BeanConfigBaseTest.class);
+//    @Autowired
+    protected ApplicationContext context;
+
+    @Before
+    public void init () throws Exception {
+        context = new ClassPathXmlApplicationContext("test-default-config.xml");
+        assertNotNull("Application context must not be null!", this.context);
+        jlog.debug("running one-time before init for class "
+                + this.getClass().getSimpleName() + " ...");
+        BeansFactory.setKustvaktContext(getContext());
+        assertNotNull(BeansFactory.getKustvaktContext());
+        initMethod();
+    }
+
+
+    protected abstract ContextHolder getContext ();
+
+
+    public void close () {
+        BeansFactory.closeApplication();
+    }
+
+    public abstract void initMethod () throws KustvaktException;
+
+
+//    protected TestHelper helper () {
+//        try {
+//            return TestHelper.newInstance(this.context);
+//        }
+//        catch (Exception e) {
+//            return null;
+//        }
+//    }
+
+
+    public static class SpringExtendedSetupListener extends
+            SpringJUnit4ClassRunner {
+
+        private BeanConfigBaseTest instanceSetupListener;
+
+
+        public SpringExtendedSetupListener (Class<?> clazz)
+                throws InitializationError {
+            super(clazz);
+        }
+
+
+        @Override
+        protected Object createTest () throws Exception {
+            Object test = super.createTest();
+            // Note that JUnit4 will call this createTest() multiple times for each
+            // test method, so we need to ensure to call "beforeClassSetup" only once.
+            if (test instanceof BeanConfigBaseTest && instanceSetupListener == null) {
+                instanceSetupListener = (BeanConfigBaseTest) test;
+                instanceSetupListener.init();
+            }
+            return test;
+        }
+
+
+        @Override
+        public void run (RunNotifier notifier) {
+            super.run(notifier);
+            if (instanceSetupListener != null)
+                instanceSetupListener.close();
+        }
+
+
+    }
+}
diff --git a/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java b/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java
new file mode 100644
index 0000000..625be6a
--- /dev/null
+++ b/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java
@@ -0,0 +1,150 @@
+package de.ids_mannheim.korap.web.service;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.core.DefaultResourceConfig;
+import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider;
+import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
+import com.sun.jersey.test.framework.AppDescriptor;
+import com.sun.jersey.test.framework.LowLevelAppDescriptor;
+import com.sun.jersey.test.framework.WebAppDescriptor;
+import com.sun.jersey.test.framework.spi.container.TestContainer;
+import com.sun.jersey.test.framework.spi.container.TestContainerException;
+import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
+import com.sun.jersey.test.framework.spi.container.grizzly.GrizzlyTestContainerFactory;
+import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
+import de.ids_mannheim.korap.config.BeanConfigBaseTest;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.springframework.web.context.ContextLoaderListener;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
+import java.net.BindException;
+import java.net.URI;
+
+/**
+ * @author hanl
+ * @date 29/07/2015
+ */
+public abstract class FastJerseyBaseTest extends BeanConfigBaseTest {
+
+    private final static String API_VERSION = "v0.1";
+
+    private static DefaultResourceConfig resourceConfig =
+            new DefaultResourceConfig();
+
+    private static TestContainerFactory testContainerFactory;
+
+    protected static TestContainer testContainer;
+
+    protected static Client client;
+
+    protected static int PORT = 8089; // FB, was: 9000;
+    protected static int PORT_IT = 1;
+    protected static String containerURI = "http://localhost/";
+
+
+    public static void addClass (Class<?> resourceClass) {
+        resourceConfig.getClasses().add(resourceClass);
+    }
+
+    public static void addSingleton (Object resourceSingleton) {
+        resourceConfig.getSingletons().add(resourceSingleton);
+    }
+
+
+    public String getAPIVersion () {
+        return API_VERSION;
+    }
+
+
+    public static <T> void addProviderForContext (Class<T> contextClass,
+            T contextObject) {
+        addSingleton(new SingletonTypeInjectableProvider<Context, T>(
+                contextClass, contextObject) {});
+    }
+
+
+    public static void addRequestFilter (Object filter) {
+        resourceConfig.getContainerRequestFilters().add(filter);
+    }
+
+
+    public static void addResponseFilter (Object filter) {
+        resourceConfig.getContainerResponseFilters().add(filter);
+    }
+
+
+    public static void setTestContainerFactory (
+            TestContainerFactory newTestContainerFactory) {
+        testContainerFactory = newTestContainerFactory;
+    }
+
+
+    @BeforeClass
+    public static void cleanStaticVariables () {
+        resourceConfig = new DefaultResourceConfig();
+    }
+
+
+    protected static void initServer (int port, String[] classPackages) {
+        AppDescriptor ad;
+        if (classPackages == null)
+            ad = new LowLevelAppDescriptor.Builder(resourceConfig).build();
+        else
+            ad = new WebAppDescriptor.Builder(classPackages)
+                    .servletClass(SpringServlet.class)
+                    .contextListenerClass(ContextLoaderListener.class)
+                    .contextParam("contextConfigLocation", "classpath:test-default-config.xml")
+                    .build();
+
+        TestContainerFactory tcf = testContainerFactory;
+        if (tcf == null) {
+            if (classPackages == null)
+                tcf = new GrizzlyTestContainerFactory();
+            else
+                tcf = new GrizzlyWebTestContainerFactory();
+        }
+
+        testContainer = tcf.create(
+                UriBuilder.fromUri(containerURI).port(port).build(), ad);
+        client = testContainer.getClient();
+        if (client == null) {
+            client = Client.create(ad.getClientConfig());
+        }
+    }
+
+
+    
+
+
+    @After
+    public void stopServer () {
+        testContainer.stop();
+        testContainer = null;
+        client = null;
+    }
+
+
+    public Client client () {
+        return client;
+    }
+
+
+    public URI getBaseUri () {
+        return testContainer.getBaseUri();
+    }
+
+
+    public WebResource resource () {
+        return client.resource(getBaseUri());
+    }
+
+
+    
+}