diff --git a/README.md b/README.md
index bd00b5c..833e120 100644
--- a/README.md
+++ b/README.md
@@ -59,7 +59,7 @@
 Set krill.indexDir in the configuration file to the location of your Krill index (relative path). In Kustvakt root directory, there is a sample index, e.g.
 <pre>krill.indexDir = ../../sample-index</pre>
 
-Set the location of the ldap configuration file for Kustvakt full version. The file should contain an admin password to access an LDAP system.
+Set the location of the ldap configuration file for Kustvakt full version. The file should contain an admin password to access an LDAP system. Without LDAP, user authentication functions and services cannot be used.
 
 <b>Optional custom configuration</b>
 
@@ -79,7 +79,7 @@
 # Running Kustvakt Server
 Requires ```kustvakt.conf``` or ```kustvakt-lite.conf``` in the same folder as the jar file. Otherwise assuming sample-index located in the parent directory of the jar file.
 
-Kustvakt full version requires an LDAP configuration file containing an admin password to access an LDAP system.
+Kustvakt full version requires an LDAP configuration file containing an admin password to access an LDAP system. You can still run Kustvakt full version without an LDAP system, but user authentication functions and services cannot be used. Only services for guest/demo user would work.
 
 <pre>
 cd target/
diff --git a/core/pom.xml b/core/pom.xml
index 26765dd..77c03a8 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -89,12 +89,24 @@
 					</execution>
 				</executions>
 			</plugin>
-
+			<!-- Generate source jar -->
+		    <plugin>
+		      <groupId>org.apache.maven.plugins</groupId>
+		      <artifactId>maven-source-plugin</artifactId>
+		      <executions>
+		        <execution>
+		          <id>attach-sources</id>
+		          <goals>
+		            <goal>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>
@@ -114,48 +126,6 @@
 					</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>
@@ -359,7 +329,7 @@
 		</dependency>
 
 		<!-- copied from extension -->
-		<dependency>
+		<!-- <dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-jdbc</artifactId>
 			<version>${spring-framework.version}</version>
@@ -373,7 +343,7 @@
 			<groupId>org.flywaydb</groupId>
 			<artifactId>flyway-core</artifactId>
 			<version>4.0</version>
-		</dependency>
+		</dependency> -->
 
 		<!-- <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> 
 			<version>2.6.5</version> </dependency> -->
@@ -418,15 +388,34 @@
 			<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> -->
+		<!-- 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>
@@ -437,7 +426,7 @@
 			<artifactId>commons-io</artifactId>
 			<version>2.4</version>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-ehcache</artifactId>
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java b/core/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java
index e353c70..de39c8b 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java
@@ -23,6 +23,7 @@
 
 /**
  * Created by hanl on 7/15/14.
+ * EM: why would we need this?
  */
 @Provider
 @Component
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/service/BootableBeanInterface.java b/core/src/main/java/de/ids_mannheim/korap/web/service/BootableBeanInterface.java
index c600aaa..56915c3 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/service/BootableBeanInterface.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/service/BootableBeanInterface.java
@@ -7,6 +7,7 @@
  * @author hanl
  * @date 12/01/2016
  */
+@Deprecated
 public interface BootableBeanInterface {
 
     void load (ContextHolder beans) throws KustvaktException;
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/service/BootupInterface.java b/core/src/main/java/de/ids_mannheim/korap/web/service/BootupInterface.java
index f421e92..86b62d9 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/service/BootupInterface.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/service/BootupInterface.java
@@ -6,6 +6,7 @@
  * @author hanl
  * @date 12/01/2016
  */
+@Deprecated
 public interface BootupInterface {
 
     void load () throws KustvaktException;
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java b/core/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
index 8db99be..91f7205 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
@@ -26,6 +26,7 @@
  * @author hanl
  * @date 15/01/2016
  */
+@Deprecated
 public class PolicyLoader implements BootableBeanInterface {
 
 	@Override
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/service/UserLoader.java b/core/src/main/java/de/ids_mannheim/korap/web/service/UserLoader.java
index 3db2f05..cab1e1b 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/service/UserLoader.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/service/UserLoader.java
@@ -13,6 +13,7 @@
  * @author hanl
  * @date 12/01/2016
  */
+@Deprecated
 public class UserLoader implements BootableBeanInterface {
 
     @Override
diff --git a/full/pom.xml b/full/pom.xml
index a7ca4f4..6feb320 100644
--- a/full/pom.xml
+++ b/full/pom.xml
@@ -160,7 +160,19 @@
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
-
+		<!-- LDAP -->
+		<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>
+		
 		<!-- Hibernate -->
 		<dependency>
 			<groupId>org.hibernate</groupId>
@@ -191,6 +203,23 @@
 			<scope>compile</scope>
 		</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>
+		
+		<!-- Flyway -->
+		<dependency>
+			<groupId>org.flywaydb</groupId>
+			<artifactId>flyway-core</artifactId>
+			<version>4.0</version>
+		</dependency>
 	</dependencies>
 </project>
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java b/full/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
index 9599b74..5319c51 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
@@ -42,6 +42,12 @@
     private ResourceConverter resourceConverter;
 
 
+    /** Returns descriptions of all free resources stored in 
+     * the database.
+     * 
+     * @return a json description of all free resources stored in 
+     * the database. 
+     */
     @GET
     @Path("info")
     public Response getAllResourceInfo () {
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java b/full/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
index 617385e..ab33369 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
@@ -24,7 +24,6 @@
 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;
@@ -749,34 +748,12 @@
         }
     }
 
-    // EM: changed method POST to GET
-    @GET
-    @Path("statistics")
-    public Response getStatistics (@Context SecurityContext context,
-            @Context Locale locale, @QueryParam("collectionQuery") 
-            String collectionQuery) {
-        
-        if (collectionQuery == null || collectionQuery.isEmpty()){
-         throw KustvaktResponseHandler.throwit(new KustvaktException(
-                 StatusCodes.MISSING_ARGUMENT, "Parameter collectionQuery is missing.", 
-                 "collectionQuery"));
-        }
-        
-        
-        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
-        builder.with(collectionQuery);
-        String json = builder.toJSON();
-        
-        String stats = searchKrill.getStatistics(json);
-        if (stats.contains("-1"))
-            throw KustvaktResponseHandler.throwit(StatusCodes.NO_VALUE_FOUND);
-        jlog.debug("Stats: "+stats);
-        return Response.ok(stats).build();
-    }
+    
 
     // EM: what is child?
     @GET
     @Path("{type}/{id}/{child}/statistics")
+    @Deprecated
     public Response getStatisticsbyIdChild (@Context SecurityContext context,
             @Context Locale locale, @PathParam("type") String type,
             @PathParam("id") String id, @PathParam("child") String child) {
@@ -787,6 +764,7 @@
 
     @GET
     @Path("{type}/{id}/stats")
+    @Deprecated
     public Response getStatisticsbyId (@Context SecurityContext context,
             @Context Locale locale, @PathParam("type") String type,
             @PathParam("id") String id) {
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java b/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java
new file mode 100644
index 0000000..cb76ca8
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java
@@ -0,0 +1,87 @@
+package de.ids_mannheim.korap.web.service.full;
+
+import java.util.Locale;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.SecurityContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+
+import com.sun.jersey.spi.container.ResourceFilters;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder;
+import de.ids_mannheim.korap.web.SearchKrill;
+import de.ids_mannheim.korap.web.filter.PiwikFilter;
+import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
+
+/**
+ * Services related to statistics
+ * 
+ * @author hanl
+ * @author margaretha
+ *
+ * @date 27/09/2017
+ * 
+ */
+@Controller
+@Path("statistics/")
+@ResourceFilters({ PiwikFilter.class })
+@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+public class StatisticService {
+
+
+    private static Logger jlog =
+            LoggerFactory.getLogger(StatisticService.class);
+
+    @Autowired
+    private SearchKrill searchKrill;
+
+
+    /**
+     * Returns statistics of the virtual corpus defined by the given
+     * collectionQuery parameter.
+     * 
+     * @param context
+     *            SecurityContext
+     * @param locale
+     *            Locale
+     * @param collectionQuery
+     *            a collection query specifying a virtual corpus
+     * @return statistics of the virtual corpus defined by the given
+     *         collectionQuery parameter.
+     */
+    @GET
+    public Response getStatistics (@Context SecurityContext context,
+            @Context Locale locale,
+            @QueryParam("collectionQuery") String collectionQuery) {
+
+        if (collectionQuery == null || collectionQuery.isEmpty()) {
+            throw KustvaktResponseHandler
+                    .throwit(new KustvaktException(StatusCodes.MISSING_ARGUMENT,
+                            "Parameter collectionQuery is missing.",
+                            "collectionQuery"));
+        }
+
+
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        builder.with(collectionQuery);
+        String json = builder.toJSON();
+
+        String stats = searchKrill.getStatistics(json);
+        if (stats.contains("-1"))
+            throw KustvaktResponseHandler.throwit(StatusCodes.NO_VALUE_FOUND);
+        jlog.debug("Stats: " + stats);
+        return Response.ok(stats).build();
+    }
+}
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java b/full/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java
index 32660bc..f9a1a09 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java
@@ -17,6 +17,7 @@
  * @date 11/02/2016
  */
 @Deprecated
+@Ignore
 public class PolicyLoaderTest extends BeanConfigTest {
 
     @Test
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java b/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
index 9f72b78..d1a7b40 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
@@ -2,7 +2,6 @@
 
 import java.io.IOException;
 
-import org.junit.BeforeClass;
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 
@@ -16,7 +15,7 @@
 
 /** 
  * @author margaretha
- * @date 29/06/2017
+ * @date 27/09/2017
  *
  */
 public class StatisticsServiceTest extends FastJerseyTest {
@@ -77,7 +76,6 @@
         assert ClientResponse.Status.OK.getStatusCode() == response.getStatus();
         assertEquals(node.get("documents").asInt(),7);
         assertEquals(node.get("tokens").asInt(),279402);
-        // EM: why zero?
         assertEquals(node.get("sentences").asInt(), 11047);
         assertEquals(node.get("paragraphs").asInt(), 489);
     }
@@ -121,4 +119,21 @@
         assertEquals(node.at("/errors/0/2").asText(), ">=");
     }
 
+    
+    @Test
+    public void testGetStatisticsWithoutCollectionQuery ()
+            throws JsonProcessingException, IOException {
+        ClientResponse response = resource()
+                .path("statistics")
+                .get(ClientResponse.class);
+
+        assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(),
+                response.getStatus());
+        String ent = response.getEntity(String.class);
+        JsonNode node = mapper.readTree(ent);
+        assertEquals(node.at("/errors/0/0").asInt(), 105);
+        assertEquals(node.at("/errors/0/1").asText(),
+                "Parameter collectionQuery is missing.");
+        assertEquals(node.at("/errors/0/2").asText(), "collectionQuery");
+    }
 }
