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 24f631a..6c100ab 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -165,9 +165,9 @@
         ldapConfig = properties.getProperty("ldap.config");
         
         // EM: regex for matching availability in Krill matches
-        setPattern(properties.getProperty("kustvakt.regex.free",""), freeLicensePattern);
-        setPattern(properties.getProperty("kustvakt.regex.public",""), publicLicensePattern);
-        setPattern(properties.getProperty("kustvakt.regex.all",""), allLicensePattern);
+        freeLicensePattern = compilePattern(properties.getProperty("kustvakt.regex.free",""));
+        publicLicensePattern = compilePattern(properties.getProperty("kustvakt.regex.public",""));
+        allLicensePattern = compilePattern(properties.getProperty("kustvakt.regex.all",""));
         
         // EM: not use in the future
         //policyConfig = properties.getProperty("policies.config");
@@ -186,14 +186,13 @@
         return properties;
     }
 
-    private void setPattern (String patternStr, Pattern pattern) {
+    private Pattern compilePattern (String patternStr) {
         if (!patternStr.isEmpty()){
-            pattern = Pattern.compile(patternStr);    
+            return Pattern.compile(patternStr);    
         }
         else{
-            pattern = null;
+            return null;
         }
-        
     }
 
     public void setFoundriesAndLayers(String config) throws IOException {
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
index f9cf0bf..063a465 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
@@ -328,7 +328,7 @@
 
 		boolean isAdmin = adminHandler.isAdmin(unknown.getId());
 		unknown.setAdmin(isAdmin);
-		jlog.trace("Authentication: found username " + unknown.getUsername());
+		jlog.debug("Authentication: found username " + unknown.getUsername());
 
 		if (unknown instanceof KorAPUser) {
 			if (password == null || password.isEmpty())
@@ -374,7 +374,7 @@
 		} else if (unknown instanceof ShibUser) {
 			// todo
 		}
-		jlog.debug("Authentication done: " + username);
+		jlog.debug("Authentication done: "+unknown);
 		return unknown;
 	}
 
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/SessionAuthentication.java b/src/main/java/de/ids_mannheim/korap/security/auth/SessionAuthentication.java
index 6f42073..d6060a5 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/SessionAuthentication.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/SessionAuthentication.java
@@ -28,7 +28,7 @@
 
     private static final Logger jlog = LoggerFactory
             .getLogger(SessionAuthentication.class);
-    private SessionFactory sessions;
+    public static SessionFactory sessions;
     private ScheduledThreadPoolExecutor scheduled;
     private EncryptionIface crypto;
     private KustvaktConfiguration config;
@@ -68,10 +68,12 @@
         ctx.setUsername(user.getUsername());
         ctx.setTokenType(Attributes.SESSION_AUTHENTICATION);
         ctx.setToken(token);
-        ctx.setExpirationTime(ex.getMillis());
+        ctx.setExpirationTime(ex.getMillis()+(1000));
         ctx.setHostAddress(attr.get(Attributes.HOST).toString());
         ctx.setUserAgent(attr.get(Attributes.USER_AGENT).toString());
+        jlog.debug(ctx.toJson());
         this.sessions.putSession(token, ctx);
+        jlog.debug("session " +sessions.getSession(token).toString());
         jlog.info("create session for user: " + user.getUsername());
         return ctx;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/SessionFactory.java b/src/main/java/de/ids_mannheim/korap/security/auth/SessionFactory.java
index 9cc270f..2d6d53e 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/SessionFactory.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/SessionFactory.java
@@ -33,9 +33,9 @@
 
     private static Logger jlog = LoggerFactory.getLogger(SessionFactory.class);
 
-    private final ConcurrentMap<String, TokenContext> sessionsObject;
-    private final ConcurrentMap<String, DateTime> timeCheck;
-    private final ConcurrentMultiMap<String, String> loggedInRecord;
+    public static ConcurrentMap<String, TokenContext> sessionsObject;
+    public static ConcurrentMap<String, DateTime> timeCheck;
+    public static ConcurrentMultiMap<String, String> loggedInRecord;
     //    private final ConcurrentMultiMap<String, Long> failedLogins;
     private final boolean multipleEnabled;
     private final int inactive;
diff --git a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index 974fa00..4ef0d7a 100644
--- a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -103,7 +103,7 @@
         servletHolder.setInitParameter("com.sun.jersey.config.property.packages", 
                 rootPackages);
         servletHolder.setInitOrder(1);
-        contextHandler.addServlet(servletHolder, "/kustvakt/*");
+        contextHandler.addServlet(servletHolder, "/api/*");
         
         SocketConnector connector = new SocketConnector();
         connector.setPort(kargs.port);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/AuthService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/AuthService.java
index 4cb0169..2802ceb 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/AuthService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/AuthService.java
@@ -17,6 +17,7 @@
 import de.ids_mannheim.korap.web.filter.*;
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
+import org.eclipse.jetty.util.log.Log;
 import org.slf4j.Logger;
 
 import javax.servlet.http.HttpServletRequest; // FB
@@ -45,24 +46,25 @@
 @Produces(MediaType.TEXT_HTML + ";charset=utf-8")
 public class AuthService {
 
-	private static Boolean DEBUG_LOG = true;
-	
+    private static Boolean DEBUG_LOG = true;
+
     //todo: bootstrap function to transmit certain default configuration settings and examples (example user queries,
     // default usersettings, etc.)
     private static Logger jlog = KustvaktLogger.getLogger(AuthService.class);
 
     private AuthenticationManagerIface controller;
 
+
     //    private SendMail mail;
 
     public AuthService () {
-        this.controller = BeansFactory.getKustvaktContext()
-                .getAuthenticationManager();
+        this.controller =
+                BeansFactory.getKustvaktContext().getAuthenticationManager();
         //todo: replace with real property values
         //        this.mail = new SendMail(ExtConfiguration.getMailProperties());
     }
 
-  
+
     /**
      * represents json string with data. All GUI clients can access
      * this method to get certain default values
@@ -88,7 +90,8 @@
     // fixme: moved to user
     @GET
     @Path("status")
-    @ResourceFilters({ AuthFilter.class, DemoUserFilter.class, BlockingFilter.class })
+    @ResourceFilters({ AuthFilter.class, DemoUserFilter.class,
+            BlockingFilter.class })
     public Response getStatus (@Context SecurityContext context,
             @HeaderParam(ContainerRequest.USER_AGENT) String agent,
             @HeaderParam(ContainerRequest.HOST) String host,
@@ -101,61 +104,65 @@
     @GET
     @Path("apiToken")
     //@ResourceFilters({HeaderFilter.class})
-    public Response requestAPIToken (
-    		@Context HttpHeaders headers,
+    public Response requestAPIToken (@Context HttpHeaders headers,
             @Context Locale locale,
             @HeaderParam(ContainerRequest.USER_AGENT) String agent,
             @HeaderParam(ContainerRequest.HOST) String host,
             @HeaderParam("referer-url") String referer,
             @QueryParam("scope") String scopes,
-         //   @Context WebServiceContext wsContext, // FB
+            //   @Context WebServiceContext wsContext, // FB
             @Context SecurityContext secCtx) {
-    	
-        List<String> auth = headers
-                .getRequestHeader(ContainerRequest.AUTHORIZATION);
+
+        List<String> auth =
+                headers.getRequestHeader(ContainerRequest.AUTHORIZATION);
+        if (auth == null || auth.isEmpty()) {
+            throw KustvaktResponseHandler
+                    .throwit(new KustvaktException(StatusCodes.MISSING_ARGUMENT,
+                            "Authorization header is missing.",
+                            "Authorization header"));
+        }
 
         String[] values = BasicHttpAuth.decode(auth.get(0));
 
-        if( DEBUG_LOG == true )
-        	{
+        if (DEBUG_LOG == true) {
             System.out.printf("Debug: AuthService.requestAPIToken...:\n");
-	        System.out.printf("Debug: auth.size=%d\n",  auth.size());
-	        System.out.printf("auth.get(0)='%s'\n", auth.get(0));
-	        System.out.printf("Debug: values.length=%d\n",  values.length);
-	        /* hide password etc. - FB
-	         if( auth.size() > 0 )
-	        	{
-	        	Iterator it = auth.iterator();
-	        	while( it.hasNext() )
-	        		System.out.printf(" header '%s'\n",  it.next());
-	        	}
-	        if( values.length > 0 )
-	        	{
-	        	for(int i=0; i< values.length; i++)
-	        		{
-	        		System.out.printf(" values[%d]='%s'\n",  i, values[i]);
-	        		}
-	        	}
-	         */
-	        MultivaluedMap<String,String> headerMap = headers.getRequestHeaders();
-	        if( headerMap != null && headerMap.size() > 0 )
-	        {
-	        	Iterator<String> it = headerMap.keySet().iterator();
-	        	while( it.hasNext() )
-	        	{
-	        		String key = (String)it.next();
-	        		List<String> vals= headerMap.get(key);
-	        		System.out.printf("Debug: requestAPIToken: '%s' = '%s'\n", key, vals);	
-	        	}
-	        	
-	        }
-	        System.out.printf("Debug: requestAPIToken: isSecure = %s.\n", secCtx.isSecure() ? "yes" : "no");
-	        } // DEBUG_LOG        
-        
+            System.out.printf("Debug: auth.size=%d\n", auth.size());
+            System.out.printf("auth.get(0)='%s'\n", auth.get(0));
+            System.out.printf("Debug: values.length=%d\n", values.length);
+            /* hide password etc. - FB
+             if( auth.size() > 0 )
+            	{
+            	Iterator it = auth.iterator();
+            	while( it.hasNext() )
+            		System.out.printf(" header '%s'\n",  it.next());
+            	}
+            if( values.length > 0 )
+            	{
+            	for(int i=0; i< values.length; i++)
+            		{
+            		System.out.printf(" values[%d]='%s'\n",  i, values[i]);
+            		}
+            	}
+             */
+            MultivaluedMap<String, String> headerMap =
+                    headers.getRequestHeaders();
+            if (headerMap != null && headerMap.size() > 0) {
+                Iterator<String> it = headerMap.keySet().iterator();
+                while (it.hasNext()) {
+                    String key = (String) it.next();
+                    List<String> vals = headerMap.get(key);
+                    System.out.printf("Debug: requestAPIToken: '%s' = '%s'\n",
+                            key, vals);
+                }
+
+            }
+            System.out.printf("Debug: requestAPIToken: isSecure = %s.\n",
+                    secCtx.isSecure() ? "yes" : "no");
+        } // DEBUG_LOG        
+
         // "Invalid syntax for username and password"
         if (values == null)
-            throw KustvaktResponseHandler
-                    .throwit(StatusCodes.ACCESS_DENIED);
+            throw KustvaktResponseHandler.throwit(StatusCodes.ACCESS_DENIED);
 
         if (values[0].equalsIgnoreCase("null")
                 | values[1].equalsIgnoreCase("null"))
@@ -167,7 +174,7 @@
             attr.put(Attributes.SCOPES, scopes);
         attr.put(Attributes.HOST, host);
         attr.put(Attributes.USER_AGENT, agent);
-        
+
         TokenContext context;
         try {
             // User user = controller.authenticate(0, values[0], values[1], attr); Implementation by Hanl
@@ -176,11 +183,13 @@
             // todo: is this necessary?
             //            attr.putAll(data.fields());
             controller.setAccessAndLocation(user, headers);
-            if( DEBUG_LOG == true )
-            		System.out.printf("Debug: /apiToken/: location=%s, access='%s'.\n", user.locationtoString(), user.accesstoString());
+            if (DEBUG_LOG == true) System.out.printf(
+                    "Debug: /apiToken/: location=%s, access='%s'.\n",
+                    user.locationtoString(), user.accesstoString());
             attr.put(Attributes.LOCATION, user.getLocation());
-            attr.put(Attributes.CORPUS_ACCESS,  user.getCorpusAccess());
-            context = controller.createTokenContext(user, attr, Attributes.API_AUTHENTICATION);
+            attr.put(Attributes.CORPUS_ACCESS, user.getCorpusAccess());
+            context = controller.createTokenContext(user, attr,
+                    Attributes.API_AUTHENTICATION);
         }
         catch (KustvaktException e) {
             throw KustvaktResponseHandler.throwit(e);
@@ -217,8 +226,8 @@
             @Context Locale locale,
             @HeaderParam(ContainerRequest.USER_AGENT) String agent,
             @HeaderParam(ContainerRequest.HOST) String host) {
-        List<String> auth = headers
-                .getRequestHeader(ContainerRequest.AUTHORIZATION);
+        List<String> auth =
+                headers.getRequestHeader(ContainerRequest.AUTHORIZATION);
 
         String[] values = BasicHttpAuth.decode(auth.get(0));
         //        authentication = StringUtils.stripTokenType(authentication);
@@ -228,8 +237,7 @@
 
         // "Invalid syntax for username and password"
         if (values == null)
-            throw KustvaktResponseHandler
-                    .throwit(StatusCodes.BAD_CREDENTIALS);
+            throw KustvaktResponseHandler.throwit(StatusCodes.BAD_CREDENTIALS);
 
         // Implementation Hanl mit '|'. 16.02.17/FB
         //if (values[0].equalsIgnoreCase("null")
@@ -242,15 +250,18 @@
         attr.put(Attributes.HOST, host);
         attr.put(Attributes.USER_AGENT, agent);
         TokenContext context;
+        String contextJson;
         try {
             User user = controller.authenticate(0, values[0], values[1], attr);
             context = controller.createTokenContext(user, attr,
                     Attributes.SESSION_AUTHENTICATION);
+            contextJson = context.toJson();
+            jlog.debug(contextJson);
         }
         catch (KustvaktException e) {
             throw KustvaktResponseHandler.throwit(e);
         }
-        return Response.ok().entity(context.toJson()).build();
+        return Response.ok().entity(contextJson).build();
     }
 
 
@@ -290,8 +301,10 @@
     //fixme: moved from userservice
     @GET
     @Path("logout")
-    @ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
-    public Response logout (@Context SecurityContext ctx, @Context Locale locale) {
+    @ResourceFilters({ AuthFilter.class, DemoUserFilter.class,
+            PiwikFilter.class })
+    public Response logout (@Context SecurityContext ctx,
+            @Context Locale locale) {
         TokenContext context = (TokenContext) ctx.getUserPrincipal();
         try {
             controller.logout(context);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
index 6f2835f..3358eb4 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
@@ -24,6 +24,7 @@
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriBuilder;
 
+import org.junit.Ignore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -143,6 +144,7 @@
     }
 
 
+    @Deprecated
     @GET
     @Path("{type}/{id}/{child}")
     public Response getResource (@Context SecurityContext context,
@@ -160,6 +162,7 @@
      * @param type
      * @return
      */
+    @Deprecated
     @GET
     @Path("{type}/{id}")
     public Response getResource (@Context SecurityContext context,
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/UserService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/UserService.java
index 74f3cf5..b36ff99 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/UserService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/UserService.java
@@ -32,7 +32,7 @@
  * @author hanl, margaretha
  * @lastUpdate 04/2017
  */
-@Path(KustvaktServer.API_VERSION + "/user")
+@Path("/user")
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
 @ResourceFilters({ PiwikFilter.class })
 public class UserService {
@@ -68,8 +68,7 @@
         User user;
         try {
             uriBuilder = info.getBaseUriBuilder();
-            uriBuilder.path(KustvaktServer.API_VERSION).path("user")
-                    .path("confirm");
+            uriBuilder.path("user").path("confirm");
             user = controller.createUserAccount(values, true);
         }
         catch (KustvaktException e) {
diff --git a/src/main/resources/default-config.xml b/src/main/resources/default-config.xml
index a688882..94a9c53 100644
--- a/src/main/resources/default-config.xml
+++ b/src/main/resources/default-config.xml
@@ -101,9 +101,10 @@
 		<!-- <property name="validateOnMigrate" value="false" /> -->
 		<!-- <property name="cleanOnValidationError" value="true" /> -->
 		<property name="locations" value="${jdbc.schemaPath}" />
-		<property name="dataSource" ref="dataSource" />
+		<property name="dataSource" ref="sqliteDataSource" />
 	</bean>
-
+	
+	
 	<bean id="kustvakt_db" class="de.ids_mannheim.korap.handlers.JDBCClient">
 		<constructor-arg index="0" ref="dataSource" />
 		<!-- deprecated property -->
diff --git a/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java b/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java
index 91ad661..96a3e87 100644
--- a/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java
@@ -4,12 +4,14 @@
 import de.ids_mannheim.korap.handlers.EntityDao;
 import de.ids_mannheim.korap.web.service.UserLoader;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
  * @author hanl
  * @date 11/02/2016
  */
+@Ignore
 public class UserLoaderTest extends BeanConfigTest {
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/misc/FileAuditingTest.java b/src/test/java/de/ids_mannheim/korap/misc/FileAuditingTest.java
index f10fec4..06993b0 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/FileAuditingTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/FileAuditingTest.java
@@ -4,6 +4,7 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import org.joda.time.LocalDate;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.Date;
@@ -32,7 +33,8 @@
     }
 
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Ignore
+    @Test (expected = UnsupportedOperationException.class)
     public void testRetrieval () {
         helper().getContext().getAuditingProvider()
                 .retrieveRecords(new LocalDate(new Date().getTime()), 10);
diff --git a/src/test/java/de/ids_mannheim/korap/misc/LocalQueryTest.java b/src/test/java/de/ids_mannheim/korap/misc/LocalQueryTest.java
index 41ac422..45c2324 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/LocalQueryTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/LocalQueryTest.java
@@ -47,6 +47,7 @@
 
     @Test
     public void testCollQuery () throws IOException {
+        String qstring = "creationDate since 1800 & creationDate until 1820";
         CollectionQueryProcessor processor = new CollectionQueryProcessor();
         processor.process(qstring);
 
diff --git a/src/test/java/de/ids_mannheim/korap/misc/MetaQueryBuilderTest.java b/src/test/java/de/ids_mannheim/korap/misc/MetaQueryBuilderTest.java
index 4b37a42..e99c8a9 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/MetaQueryBuilderTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/MetaQueryBuilderTest.java
@@ -1,7 +1,6 @@
 package de.ids_mannheim.korap.misc;
 import de.ids_mannheim.korap.config.QueryBuilderUtil;
 import de.ids_mannheim.korap.query.serialize.MetaQueryBuilder;
-import org.junit.Assert;
 import org.junit.Test;
 
 import java.util.Map;
@@ -21,11 +20,10 @@
         MetaQueryBuilder m = QueryBuilderUtil.defaultMetaBuilder(0, 1, 5,
                 "sentence", false);
         Map map = m.raw();
-
         assertEquals("sentence", map.get("context"));
         assertEquals(1, map.get("startPage"));
         assertEquals(0, map.get("startIndex"));
-        assertEquals(false, map.get("cufOff"));
+        assertEquals(false, map.get("cutOff"));
 
     }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java b/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
index 59b3053..f5a2085 100644
--- a/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
@@ -38,6 +38,7 @@
 
 
     @Test
+    @Ignore
     public void testCreateUser () throws KustvaktException {
         User user = helper().getContext().getAuthenticationManager()
                 .createUserAccount(KustvaktConfiguration.KUSTVAKT_USER, false);
@@ -61,6 +62,7 @@
 
 
     @Test
+    @Ignore
     public void testUserdetailsGet () throws KustvaktException {
         testCreateUser();
         AuthenticationManagerIface manager = helper().getContext()
@@ -76,6 +78,7 @@
 
 
     @Test
+    @Ignore
     public void testUsersettingsGet () throws KustvaktException {
         testCreateUser();
         AuthenticationManagerIface manager = helper().getContext()
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
index fd648d6..7cb49a3 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
@@ -2,7 +2,6 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.json.JSONUnmarshaller;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
@@ -51,7 +50,7 @@
     @Test
     public void testSessionToken() {
         String auth = BasicHttpAuth.encode(credentials[0], credentials[1]);
-        ClientResponse response = resource().path(getAPIVersion()).path("auth")
+        ClientResponse response = resource().path("auth")
                 .path("sessionToken").header(Attributes.AUTHORIZATION, auth)
                 .get(ClientResponse.class);
         assertEquals(ClientResponse.Status.OK.getStatusCode(),
@@ -68,19 +67,26 @@
         assertNotEquals("", token_type);
         assertFalse(TimeUtils.isExpired(ex.getMillis()));
 
-        response = resource().path(getAPIVersion()).path("user")
+        response = resource().path("user")
                 .path("info").header(Attributes.AUTHORIZATION, token_type + " "+ token)
                 .get(ClientResponse.class);
         en = response.getEntity(String.class);
 
         assertEquals(ClientResponse.Status.OK.getStatusCode(),
                 response.getStatus());
+        
+        response = resource().path("auth")
+                .path("logout").header(Attributes.AUTHORIZATION, token_type + " "+ token)
+                .get(ClientResponse.class);
+        
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
     }
 
     @Test
     public void testSessionTokenExpire() {
         String auth = BasicHttpAuth.encode(credentials[0], credentials[1]);
-        ClientResponse response = resource().path(getAPIVersion()).path("auth")
+        ClientResponse response = resource().path("auth")
                 .path("sessionToken").header(Attributes.AUTHORIZATION, auth)
                 .get(ClientResponse.class);
         assertEquals(ClientResponse.Status.OK.getStatusCode(),
@@ -100,7 +106,7 @@
             if (TimeUtils.isExpired(ex.getMillis()))
                 break;
         }
-        response = resource().path(getAPIVersion()).path("user")
+        response = resource().path("user")
                 .path("info").header(Attributes.AUTHORIZATION, token_type + " "+ token)
                 .get(ClientResponse.class);
         en = response.getEntity(String.class);
@@ -113,53 +119,53 @@
     }
 
 
-    @Test
-    public void testBlockingFilterFail() {
-
-    }
-
-
-    @Test
-    public void testBasicLogout () {
-
-    }
-
-
-    @Test
-    public void testSessionTokenLogin () {
-
-    }
-
-
-    @Test
-    public void testSessionTokenLogout () {
-
-    }
-
-
-    @Test
-    public void testOpenIDLogin () {
-
-    }
-
-
-    @Test
-    public void testOpenIDLogout () {
-
-    }
-
-
-    // -- are these even right? auth - authorization
-    @Test
-    public void testOAuth2Login () {
-
-    }
-
-
-    @Test
-    public void testOAuth2Logout () {
-
-    }
+//    @Test
+//    public void testBlockingFilterFail() {
+//
+//    }
+//
+//
+//    @Test
+//    public void testBasicLogout () {
+//
+//    }
+//
+//
+//    @Test
+//    public void testSessionTokenLogin () {
+//
+//    }
+//
+//
+//    @Test
+//    public void testSessionTokenLogout () {
+//
+//    }
+//
+//
+//    @Test
+//    public void testOpenIDLogin () {
+//
+//    }
+//
+//
+//    @Test
+//    public void testOpenIDLogout () {
+//
+//    }
+//
+//
+//    // -- are these even right? auth - authorization
+//    @Test
+//    public void testOAuth2Login () {
+//
+//    }
+//
+//
+//    @Test
+//    public void testOAuth2Logout () {
+//
+//    }
 
     //todo: test basicauth via secure connection
 
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java
index a8b1c6e..746a62c 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java
@@ -31,7 +31,7 @@
     @Test
     public void testTestUserAuth () {
         ClientResponse resp = resource()
-                .path(getAPIVersion())
+                
                 .path("user/info")
                 .header(Attributes.AUTHORIZATION,
                         BasicHttpAuth.encode(
@@ -45,7 +45,7 @@
     @Test
     @Ignore
     public void testDemoAuth () {
-        ClientResponse resp = resource().path(getAPIVersion())
+        ClientResponse resp = resource()
                 .path("user/info").get(ClientResponse.class);
         assertEquals(ClientResponse.Status.OK.getStatusCode(), resp.getStatus());
     }
@@ -54,7 +54,7 @@
     @Test
     public void testUnauthorizedAuth () {
         ClientResponse resp = resource()
-                .path(getAPIVersion())
+                
                 .path("user/info")
                 .header(Attributes.AUTHORIZATION,
                         BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktCoreRestTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktCoreRestTest.java
index 0cf4dcc..9113353 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktCoreRestTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktCoreRestTest.java
@@ -34,7 +34,7 @@
 
     //    @Test
     public void testFieldsInSearch () {
-        ClientResponse response = resource().path(getAPIVersion())
+        ClientResponse response = resource()
                 .path("search").queryParam("q", "[base=Wort]")
                 .queryParam("ql", "poliqarp").get(ClientResponse.class);
         assert ClientResponse.Status.OK.getStatusCode() == response.getStatus();
@@ -43,11 +43,11 @@
 
     @Test
     public void testQuery () {
-        ClientResponse response = resource().path(getAPIVersion())
+        ClientResponse response = resource()
                 .path("search").queryParam("q", "[base=Wort]")
                 .queryParam("ql", "poliqarp").get(ClientResponse.class);
         //        System.out.println("_______________________________________________");
-        //        System.out.println(response.getEntity(String.class));
+                System.out.println(response.getEntity(String.class));
         assert ClientResponse.Status.OK.getStatusCode() == response.getStatus();
     }
 
@@ -57,7 +57,7 @@
         QuerySerializer s = new QuerySerializer();
         s.setQuery("[base=Wort]", "poliqarp");
 
-        ClientResponse response = resource().path(getAPIVersion())
+        ClientResponse response = resource()
                 .path("search").post(ClientResponse.class, s.toJSON());
         //        System.out.println("_______________________________________________ RAW");
         //        System.out.println(response.getEntity(String.class));
@@ -75,7 +75,7 @@
    
     //    @Test
     public void testBuildQueryThrowsNoException () {
-        ClientResponse response = resource().path(getAPIVersion())
+        ClientResponse response = resource()
                 .path("search").queryParam("q", "[base=Haus & surface=Hauses]")
                 .queryParam("ql", "poliqarp").queryParam("cutOff", "true")
                 .queryParam("page", "1").method("TRACE", ClientResponse.class);
@@ -85,7 +85,7 @@
 
     //    @Test
     public void testQueryByNameThrowsNoException () {
-        ClientResponse response = resource().path(getAPIVersion())
+        ClientResponse response = resource()
                 .path("corpus").path("WPD").path("search")
                 .queryParam("q", "[base=Haus & surface=Hauses]")
                 .queryParam("ql", "poliqarp").queryParam("cutOff", "true")
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktServerTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktServerTest.java
index 6a5674d..f6a1388 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktServerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktServerTest.java
@@ -25,6 +25,7 @@
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.HttpClients;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -55,6 +56,8 @@
  * @author margaretha
  *
  */
+@Ignore
+@Deprecated
 public class KustvaktServerTest extends BeanConfigTest {
     private static ObjectMapper mapper = new ObjectMapper();
 
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/LightServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/LightServiceTest.java
index c98743c..afdf435 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/LightServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/LightServiceTest.java
@@ -8,6 +8,7 @@
 import de.ids_mannheim.korap.web.service.FastJerseyTest;
 import org.apache.lucene.LucenePackage;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -15,8 +16,11 @@
 import static org.junit.Assert.assertNotNull;
 
 /**
+ * EM: FIX ME: Database restructure
+ * 
  * Created by hanl on 29.04.16.
  */
+@Ignore
 public class LightServiceTest extends FastJerseyTest {
 
     @BeforeClass
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java
index ecff17b..f063aca 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java
@@ -7,6 +7,7 @@
 import java.util.UUID;
 
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.sun.jersey.api.client.ClientResponse;
@@ -31,6 +32,7 @@
 /** FIX ME: Database restructure
  * @author margaretha
  */
+@Ignore
 public class PolicyServiceTest extends FastJerseyTest {
 
     private User user = UserFactory.getDemoUser();
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceInfoServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceInfoServiceTest.java
index c6b7135..e0cfe1a 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceInfoServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceInfoServiceTest.java
@@ -6,6 +6,7 @@
 import static org.junit.Assert.assertTrue;
 
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -21,6 +22,7 @@
  * @lastUpdate 19/04/2017
  * EM: FIX ME: Database restructure
  */
+@Ignore
 public class ResourceInfoServiceTest extends FastJerseyTest {
 
     @Override
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
index b55fa73..5dd9bab 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
@@ -31,6 +31,8 @@
  * @date 14/01/2016
  * @update 24/04/2017
  */
+@Ignore
+@Deprecated
 public class ResourceServiceTest extends FastJerseyTest {
 
     @BeforeClass
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/SearchWithAvailabilityTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/SearchWithAvailabilityTest.java
index d2b1386..69ed333 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/SearchWithAvailabilityTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/SearchWithAvailabilityTest.java
@@ -256,7 +256,7 @@
                 "availability = /.*NC.*/");
         assertEquals(ClientResponse.Status.OK.getStatusCode(),
                 response.getStatus());
-
+//        System.out.println(response.getEntity(String.class));
         checkAndFree(response.getEntity(String.class));
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
index 5502366..f85ca36 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
@@ -71,7 +71,7 @@
 		map.putSingle("firstName", "test");
 		map.putSingle("lastName", "user");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("register")
+		ClientResponse response = resource().path("user").path("register")
 				.header("Content-Type", MediaType.APPLICATION_JSON).post(ClientResponse.class, JsonUtils.toJSON(map));
 		assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
 		String ent = response.getEntity(String.class);
@@ -82,7 +82,7 @@
 		// map.putSingle("address", "Mannheim");
 
 		String enc = BasicHttpAuth.encode("testuser", "testPassword1234");
-		response = resource().path(getAPIVersion()).path("user").path("info")
+		response = resource().path("user").path("info")
 				.header("Content-Type", MediaType.APPLICATION_JSON).header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 
@@ -100,14 +100,14 @@
 		map.putSingle("lastName", "user");
 		map.putSingle("address", "Mannheim");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("register")
+		ClientResponse response = resource().path("user").path("register")
 				.header("Content-Type", MediaType.APPLICATION_JSON).post(ClientResponse.class, map);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
 		// run login/ status --> exception or information about locked account
 		// should appear
 		String enc = BasicHttpAuth.encode("testuser2", "testPassword1234");
-		response = resource().path(getAPIVersion()).path("user").path("info").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("info").header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 		String ent = response.getEntity(String.class);
@@ -125,7 +125,7 @@
 		map.putSingle("lastName", "user");
 		map.putSingle("address", "Mannheim");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("register")
+		ClientResponse response = resource().path("user").path("register")
 				.header("Content-Type", MediaType.APPLICATION_JSON).post(ClientResponse.class, map);
 
 		String ent = response.getEntity(String.class);
@@ -140,7 +140,7 @@
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
 		String enc = BasicHttpAuth.encode("testuser", "testPassword1234");
-		response = resource().path(getAPIVersion()).path("user").path("info").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("info").header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 	}
@@ -148,7 +148,7 @@
 	@Test
 	public void loginHTTP() {
 		String enc = BasicHttpAuth.encode(credentials[0], credentials[1]);
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("info")
+		ClientResponse response = resource().path("user").path("info")
 				.header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 	}
@@ -159,12 +159,12 @@
 	public void loginJWT() {
 		String en = BasicHttpAuth.encode(credentials[0], credentials[1]);
 		/* lauffähige Version von Hanl: */
-		ClientResponse response = resource().path(getAPIVersion()).path("auth").path("apiToken")
+		ClientResponse response = resource().path("auth").path("apiToken")
 				.header(Attributes.AUTHORIZATION, en).get(ClientResponse.class);
 		/**/
 		/*
 		 * Test : ClientResponse response = null; WebResource webRes =
-		 * resource().path(getAPIVersion()).path("auth") .path("apiToken");
+		 * resource().path("auth") .path("apiToken");
 		 * webRes.header(Attributes.AUTHORIZATION, en);
 		 * 
 		 * System.out.printf("resource: " + webRes.toString());
@@ -188,7 +188,7 @@
 		assertTrue(BeansFactory.getKustvaktContext().getConfiguration().getTokenTTL() < 10);
 
 		String en = BasicHttpAuth.encode(credentials[0], credentials[1]);
-		ClientResponse response = resource().path(getAPIVersion()).path("auth").path("apiToken")
+		ClientResponse response = resource().path("auth").path("apiToken")
 				.header(Attributes.AUTHORIZATION, en).get(ClientResponse.class);
 
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
@@ -207,7 +207,7 @@
 				break;
 		}
 
-		response = resource().path(getAPIVersion()).path("user").path("info")
+		response = resource().path("user").path("info")
 				.header(Attributes.AUTHORIZATION, "api_token " + token).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
 
@@ -216,7 +216,7 @@
 	@Test
 	public void testGetUserDetails() {
 		String enc = BasicHttpAuth.encode(credentials[0], credentials[1]);
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 	}
@@ -227,12 +227,12 @@
 		Map m = new LinkedMap();
 		m.put("test", "[100, \"error message\", true, \"another message\"]");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.header(Attributes.AUTHORIZATION, enc).header("Content-Type", MediaType.APPLICATION_JSON)
 				.post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("details").queryParam("pointer", "test")
+		response = resource().path("user").path("details").queryParam("pointer", "test")
 				.header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 		String ent = response.getEntity(String.class);
@@ -245,12 +245,12 @@
 		Map m = new LinkedMap();
 		m.put("test", "test value 1");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.header(Attributes.AUTHORIZATION, enc).header("Content-Type", MediaType.APPLICATION_JSON)
 				.post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("details").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("details").header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 		String ent = response.getEntity(String.class);
@@ -264,7 +264,7 @@
 	@Test
 	public void testGetUserDetailsPointer() {
 		String enc = BasicHttpAuth.encode(credentials[0], credentials[1]);
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.queryParam("pointer", "email").header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 		String ent = response.getEntity(String.class);
@@ -276,7 +276,7 @@
 		helper().setupSimpleAccount("userservicetest", "servicepass");
 
 		String enc = BasicHttpAuth.encode("userservicetest", "servicepass");
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
 		String entity = response.getEntity(String.class);
@@ -290,7 +290,7 @@
 	@Test
 	public void testGetUserSettings() {
 		String enc = BasicHttpAuth.encode(credentials[0], credentials[1]);
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("settings")
+		ClientResponse response = resource().path("user").path("settings")
 				.header(Attributes.AUTHORIZATION, enc).get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 	}
@@ -303,12 +303,12 @@
 		m.put("lastName", "newLastName");
 		m.put("email", "newtest@ids-mannheim.de");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("details")
+		ClientResponse response = resource().path("user").path("details")
 				.header(Attributes.AUTHORIZATION, enc).header("Content-Type", MediaType.APPLICATION_JSON)
 				.post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("details").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("details").header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
@@ -324,7 +324,7 @@
 		m.put("lastName", "user");
 		m.put("email", "test@ids-mannheim.de");
 
-		response = resource().path(getAPIVersion()).path("user").path("details").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("details").header(Attributes.AUTHORIZATION, enc)
 				.header("Content-Type", MediaType.APPLICATION_JSON).post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 	}
@@ -337,7 +337,7 @@
 		m.putSingle("queryLanguage", "poliqarp_test");
 		m.putSingle("pageLength", "200");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("settings")
+		ClientResponse response = resource().path("user").path("settings")
 				.header(Attributes.AUTHORIZATION, enc).header("Content-Type", "application/x-www-form-urlencoded")
 				.get(ClientResponse.class);
 
@@ -351,11 +351,11 @@
 
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
 				.header("Content-Type", "application/x-www-form-urlencoded").post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
 				.header("Content-Type", "application/x-www-form-urlencoded").get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
@@ -376,7 +376,7 @@
 		m.put("pageLength", "200");
 		m.put("setting_1", "value_1");
 
-		ClientResponse response = resource().path(getAPIVersion()).path("user").path("settings")
+		ClientResponse response = resource().path("user").path("settings")
 				.header(Attributes.AUTHORIZATION, enc).header("Content-Type", MediaType.APPLICATION_JSON)
 				.get(ClientResponse.class);
 
@@ -390,11 +390,11 @@
 
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
 				.header("Content-Type", MediaType.APPLICATION_JSON).post(ClientResponse.class, m);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
-		response = resource().path(getAPIVersion()).path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
+		response = resource().path("user").path("settings").header(Attributes.AUTHORIZATION, enc)
 				.get(ClientResponse.class);
 		assertEquals(ClientResponse.Status.OK.getStatusCode(), response.getStatus());
 
diff --git a/src/test/resources/kustvakt-test.conf b/src/test/resources/kustvakt-test.conf
index dce2127..50afe37 100644
--- a/src/test/resources/kustvakt-test.conf
+++ b/src/test/resources/kustvakt-test.conf
@@ -1,5 +1,4 @@
 ## index dir
-#krill.indexDir = src/main/resources/index-goe-lucene5
 krill.indexDir = src/test/resources/sample-index
 
 krill.index.commit.count = 134217000
@@ -23,18 +22,6 @@
 server.port=8089
 server.host=localhost
 
-# init user
-kustvakt.init.user.id = 1000
-kustvakt.init.user.username = kustvakt
-kustvakt.init.user.password = kustvakt2015
-kustvakt.init.user.email = kustvakt@ids-mannheim.de
-kustvakt.init.user.country = Germany
-kustvakt.init.user.address = Mannheim
-kustvakt.init.user.firstname = Kustvakt
-kustvakt.init.user.lastname = KorAP
-kustvakt.init.user.institution = IDS Mannheim
-kustvakt.init.user.admin = true
-
 # user configuration
 # user.config = user.conf
 
@@ -47,8 +34,10 @@
 security.tokenTTL = 9S
 security.shortTokenTTL = 5S
 
+kustvakt.security.jwt.issuer=korap.ids-mannheim.de
+
 ## specifies the user data field that is used to salt user passwords
-security.passcode.salt=accountCreation
+security.passcode.salt=salt
 
 security.idleTimeoutDuration = 25M
 security.multipleLogIn = true
@@ -59,8 +48,6 @@
 security.validation.stringLength = 150
 security.validation.emailLength = 50
 security.encryption.algo=BCRYPT
-security.sharedSecret=nHim5JB-YqkX7sS55jayGBnga8WmqgpkzieGe8UhojE
-security.adminToken=f61d02c04a0f18d60172f7b990955824
 
 ## applicable: rewrite, foundry, filter, deny
 security.rewrite.strategies=filter, foundry, rewrite
\ No newline at end of file
diff --git a/src/test/resources/test-default-config.xml b/src/test/resources/test-default-config.xml
index 09d4822..abd03af 100644
--- a/src/test/resources/test-default-config.xml
+++ b/src/test/resources/test-default-config.xml
@@ -37,8 +37,8 @@
 				<value>classpath:test-jdbc.properties</value>
 				<value>classpath:hibernate.properties</value>
 				<!-- <value>file:./jdbc.properties</value> -->
-				<value>file:./kustvakt.conf</value>
-				<value>classpath:kustvakt.conf</value>
+				<!-- <value>file:./kustvakt-test.conf</value> -->
+				<value>classpath:kustvakt-test.conf</value>
 			</array>
 		</property>
 	</bean>
