diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java b/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
index 96b5800..c353884 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
@@ -7,15 +7,13 @@
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
 import de.ids_mannheim.korap.authentication.http.TransferEncoding;
 import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.config.TokenType;
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
+import de.ids_mannheim.korap.config.FullConfiguration;
 import de.ids_mannheim.korap.config.Scopes;
+import de.ids_mannheim.korap.config.TokenType;
 import de.ids_mannheim.korap.dao.UserDao;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.interfaces.AuthenticationIface;
-import de.ids_mannheim.korap.interfaces.EncryptionIface;
-import de.ids_mannheim.korap.user.KorAPUser;
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.StringUtils;
@@ -30,10 +28,17 @@
  * Basic authentication is intended to be used with a database. It is 
  * currently only used for testing using a dummy DAO (@see {@link UserDao}) 
  * without passwords.
- *   
+ * 
+ * <br /><br />
+ * Latest changes:
+ * <ul>
+ * <li>Added userdao check
+ * </li>
+ * </ul>
+ * 
  * 
  * @author margaretha
- * @date 15/11/2017
+ * @date 01/03/2018
  * 
  * @author hanl
  * @date 28/04/2015
@@ -43,21 +48,19 @@
     @Autowired
     private TransferEncoding transferEncoding;
     @Autowired
-    private KustvaktConfiguration config;
-    @Autowired
-    private EncryptionIface crypto;
+    private FullConfiguration config;
+//    @Autowired
+//    private EncryptionIface crypto;
     @Autowired
     private UserDao dao;
 
-    public BasicAuthentication (KustvaktConfiguration config) {
-        this.config = config;
-    }
-
     @Override
     public TokenContext getTokenContext (String authToken)
             throws KustvaktException {
         String[] values = transferEncoding.decodeBase64(authToken);
-        if (values != null) {
+        User user = dao.getAccount(values[0]);
+        
+        if (user != null) {
             TokenContext c = new TokenContext();
             c.setUsername(values[0]);
             c.setExpirationTime(TimeUtils.plusSeconds(this.config.getTokenTTL())
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
index 8a8ac3d..13e5f78 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
@@ -103,11 +103,12 @@
 
 		AuthenticationIface provider = getProvider(type , null);
 
-		if (provider == null)
-			// throw exception for missing type parameter
+		if (provider == null){
 			throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT, 
-			        "token type not defined or found", "token_type");
-
+			        "Authentication provider for token type "+type
+			        +" is not found.", type.displayName());
+		}
+		
 		TokenContext context = provider.getTokenContext(token);
 		// if (!matchStatus(host, useragent, context))
 		// provider.removeUserSession(token);
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
index aee009b..f5f04ad 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
@@ -19,9 +19,9 @@
     private String testEmail;
     private String noReply;
     private String emailAddressRetrieval;
-    
+
     private String groupInvitationTemplate;
-    
+
     private String ldapConfig;
 
     private String freeOnlyRegex;
@@ -62,13 +62,17 @@
     }
 
     private void setMailConfiguration (Properties properties) {
-        setMailEnabled(Boolean.valueOf(properties.getProperty("mail.enabled", "false")));
-        if (isMailEnabled){
+        setMailEnabled(Boolean
+                .valueOf(properties.getProperty("mail.enabled", "false")));
+        if (isMailEnabled) {
             // other properties must be set in the kustvakt.conf
-            setTestEmail(properties.getProperty("mail.receiver","test@localhost"));
+            setTestEmail(
+                    properties.getProperty("mail.receiver", "test@localhost"));
             setNoReply(properties.getProperty("mail.sender"));
-            setGroupInvitationTemplate(properties.getProperty("template.group.invitation"));
-            setEmailAddressRetrieval(properties.getProperty("mail.address.retrieval","test"));
+            setGroupInvitationTemplate(
+                    properties.getProperty("template.group.invitation"));
+            setEmailAddressRetrieval(
+                    properties.getProperty("mail.address.retrieval", "test"));
         }
     }
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
index 03f00b3..bfd610d 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
@@ -11,38 +11,47 @@
 import de.ids_mannheim.korap.entity.AnnotationPair;
 import de.ids_mannheim.korap.entity.Resource;
 
+/**
+ * ResourceConverter prepares data transfer objects (DTOs) from {@link Resource}
+ * entities. DTO structure defines controllers output, namely the structure of 
+ * JSON objects in HTTP responses.
+ * 
+ * @author margaretha
+ *
+ */
 @Component
 public class ResourceConverter {
 
     public List<ResourceDto> convertToResourcesDto (List<Resource> resources) {
-        List<ResourceDto> resourceDtoList = new ArrayList<ResourceDto>(resources.size());
+        List<ResourceDto> resourceDtoList =
+                new ArrayList<ResourceDto>(resources.size());
         ResourceDto dto;
         Map<String, String> titles;
         HashMap<Integer, String> layers;
-        for (Resource r: resources){
+        for (Resource r : resources) {
             dto = new ResourceDto();
             dto.setDescription(r.getEnglishDescription());
             dto.setResourceId(r.getId());
-            dto.setLanguages(new String[]{"deu"});
-            
+            dto.setLanguages(new String[] { "deu" });
+
             titles = new HashMap<String, String>();
             titles.put("en", r.getEnglishTitle());
             titles.put("de", r.getGermanTitle());
             dto.setTitles(titles);
-            
+
             layers = new HashMap<Integer, String>();
             String foundry, layer, code;
-            for (AnnotationPair annotationPair : r.getLayers()){
+            for (AnnotationPair annotationPair : r.getLayers()) {
                 foundry = annotationPair.getAnnotation1().getCode();
                 layer = annotationPair.getAnnotation2().getCode();
-                code = foundry +"/"+layer;
+                code = foundry + "/" + layer;
                 layers.put(annotationPair.getId(), code);
             }
             dto.setLayers(layers);
-            
+
             resourceDtoList.add(dto);
         }
-        
+
         return resourceDtoList;
     }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusAccessConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusAccessConverter.java
index 3d9e3de..abd2dab 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusAccessConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusAccessConverter.java
@@ -7,7 +7,14 @@
 
 import de.ids_mannheim.korap.dto.VirtualCorpusAccessDto;
 import de.ids_mannheim.korap.entity.VirtualCorpusAccess;
-
+/**
+ * VirtualCorpusAccessConverter prepares data transfer objects (DTOs) from {@link VirtualCorpusAccess}
+ * entities. DTO structure defines controllers output, namely the structure of 
+ * JSON objects in HTTP responses.
+ * 
+ * @author margaretha
+ *
+ */
 @Component
 public class VirtualCorpusAccessConverter {
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java
index 66a74a5..52cbfe6 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java
@@ -9,6 +9,14 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.utils.JsonUtils;
 
+/**
+ * VirtualCorpusConverter prepares data transfer objects (DTOs) from {@link VirtualCorpus}
+ * entities. DTO structure defines controllers output, namely the structure of 
+ * JSON objects in HTTP responses.
+ * 
+ * @author margaretha
+ *
+ */
 @Component
 public class VirtualCorpusConverter {
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/UserGroupMember.java b/full/src/main/java/de/ids_mannheim/korap/entity/UserGroupMember.java
index f148959..bcbd100 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/UserGroupMember.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/UserGroupMember.java
@@ -1,7 +1,6 @@
 package de.ids_mannheim.korap.entity;
 
 import java.time.ZonedDateTime;
-import java.util.Date;
 import java.util.List;
 
 import javax.persistence.Column;
diff --git a/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationManagerIface.java b/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationManagerIface.java
index f968b61..cf37422 100644
--- a/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationManagerIface.java
+++ b/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationManagerIface.java
@@ -6,10 +6,9 @@
 
 import javax.ws.rs.core.HttpHeaders;
 
-import de.ids_mannheim.korap.config.TokenType;
 import de.ids_mannheim.korap.config.AuthenticationMethod;
-import de.ids_mannheim.korap.config.AuthenticationScheme;
 import de.ids_mannheim.korap.config.KustvaktCacheable;
+import de.ids_mannheim.korap.config.TokenType;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
diff --git a/full/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java b/full/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
index 5d212dd..3228f76 100644
--- a/full/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
+++ b/full/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
@@ -1,15 +1,11 @@
 package de.ids_mannheim.korap.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
+
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.resource.rewrite.KoralNode;
 import de.ids_mannheim.korap.resource.rewrite.RewriteTask;
-import de.ids_mannheim.korap.resource.rewrite.KoralNode.RewriteIdentifier;
-import de.ids_mannheim.korap.resource.rewrite.RewriteTask.IterableRewritePath;
-import de.ids_mannheim.korap.resources.Corpus;
-import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.user.User;
 
 /**
@@ -18,8 +14,6 @@
  */
 public class CollectionConstraint implements RewriteTask.IterableRewritePath {
 
-
-
     @Override
     public JsonNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
             User user) {
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
index 28e7660..a15d890 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
@@ -3,6 +3,13 @@
 import javax.mail.Authenticator;
 import javax.mail.PasswordAuthentication;
 
+/** Defines Authenticator for creating javax.mail.Session.
+ * 
+ * @see src/main/resources/default-config.xml
+ * 
+ * @author margaretha
+ *
+ */
 public class MailAuthenticator extends Authenticator {
 
     private PasswordAuthentication passwordAuthentication;
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
index 5051815..556d7b7 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
@@ -21,6 +21,12 @@
 import de.ids_mannheim.korap.interfaces.AuthenticationManagerIface;
 import de.ids_mannheim.korap.user.User;
 
+/** Manages mail related services, such as sending group member invitations 
+ * per email.  
+ * 
+ * @author margaretha
+ *
+ */
 @Service
 public class MailService {
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
index 4e0214b..9706cfc 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
@@ -296,20 +296,20 @@
         return false;
     }
 
-    public void editVCAccess (VirtualCorpusAccess access, String username)
-            throws KustvaktException {
-
-        // get all the VCA admins
-        UserGroup userGroup = access.getUserGroup();
-        List<UserGroupMember> accessAdmins =
-                userGroupService.retrieveVCAccessAdmins(userGroup);
-
-        User user = authManager.getUser(username);
-        if (!user.isSystemAdmin()) {
-            throw new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
-                    "Unauthorized operation for user: " + username, username);
-        }
-    }
+//    public void editVCAccess (VirtualCorpusAccess access, String username)
+//            throws KustvaktException {
+//
+//        // get all the VCA admins
+//        UserGroup userGroup = access.getUserGroup();
+//        List<UserGroupMember> accessAdmins =
+//                userGroupService.retrieveVCAccessAdmins(userGroup);
+//
+//        User user = authManager.getUser(username);
+//        if (!user.isSystemAdmin()) {
+//            throw new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
+//                    "Unauthorized operation for user: " + username, username);
+//        }
+//    }
 
     public List<VirtualCorpusAccessDto> listVCAccessByVC (String username,
             int vcId) throws KustvaktException {
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
index 9e15d33..72a875b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
@@ -51,9 +51,6 @@
         PiwikFilter.class })
 public class UserGroupController {
 
-    private static Logger jlog =
-            LoggerFactory.getLogger(UserGroupController.class);
-
     @Autowired
     private FullResponseHandler responseHandler;
     @Autowired
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/input/UserGroupJson.java b/full/src/main/java/de/ids_mannheim/korap/web/input/UserGroupJson.java
index e3c25bd..b08e85f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/input/UserGroupJson.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/input/UserGroupJson.java
@@ -1,8 +1,15 @@
 package de.ids_mannheim.korap.web.input;
 
+import de.ids_mannheim.korap.web.controller.UserGroupController;
 import lombok.Getter;
 import lombok.Setter;
 
+/** Java POJO of JSON input used in the user group controller for 
+ * creating user group and managing group members.
+ * 
+ * @author margaretha
+ * @see UserGroupController
+ */
 @Getter
 @Setter
 public class UserGroupJson {
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/input/VirtualCorpusJson.java b/full/src/main/java/de/ids_mannheim/korap/web/input/VirtualCorpusJson.java
index 2c8b35a..ac09516 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/input/VirtualCorpusJson.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/input/VirtualCorpusJson.java
@@ -8,7 +8,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
-/** Java POJO of JSON input of the virtual corpus service for 
+/** Java POJO of JSON input of the virtual corpus controller for 
  * creating and editing virtual corpora.
  * 
  * @author margaretha
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index 594084a..64fbe6a 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -223,9 +223,6 @@
 			type="de.ids_mannheim.korap.interfaces.db.PersistenceClient" ref="kustvakt_db" />
 	</bean>
 
-	<bean id="basic_auth" class="de.ids_mannheim.korap.authentication.BasicAuthentication" />
-
-
 	<bean id="session_auth"
 		class="de.ids_mannheim.korap.authentication.SessionAuthentication">
 		<constructor-arg type="de.ids_mannheim.korap.config.KustvaktConfiguration"
@@ -236,7 +233,6 @@
 
 	<util:list id="kustvakt_authproviders"
 		value-type="de.ids_mannheim.korap.interfaces.AuthenticationIface">
-		<ref bean="basic_auth" />
 		<ref bean="ldap_auth" />
 		<ref bean="session_auth" />
 		<!-- <ref bean="api_auth" /> -->
diff --git a/full/src/main/resources/kustvakt.conf b/full/src/main/resources/kustvakt.conf
index ab20bad..a6b2c1d 100644
--- a/full/src/main/resources/kustvakt.conf
+++ b/full/src/main/resources/kustvakt.conf
@@ -41,8 +41,6 @@
 availability.regex.public = ACA.* | QAO.NC
 availability.regex.all = QAO.*
 
-kustvakt.management.registration=enable
-
 ## options referring to the security module!
 
 ## token expiration time in minutes!
@@ -50,7 +48,7 @@
 security.tokenTTL=72H
 security.shortTokenTTL=45M
 
-kustvakt.security.jwt.issuer=korap.ids-mannheim.de
+security.jwt.issuer=korap.ids-mannheim.de
 
 ## specifies the user data field that is used to salt user passwords
 security.passcode.salt=salt
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
index c907338..e79195a 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
@@ -58,8 +58,9 @@
                 .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
                 .get(ClientResponse.class);
         String entity = response.getEntity(String.class);
+        System.out.println(entity);
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        //        System.out.println(entity);
+      
         JsonNode node = JsonUtils.readTree(entity);
 
         JsonNode group = node.get(1);
diff --git a/full/src/test/resources/kustvakt-test.conf b/full/src/test/resources/kustvakt-test.conf
index 1de6cb1..8a9f170 100644
--- a/full/src/test/resources/kustvakt-test.conf
+++ b/full/src/test/resources/kustvakt-test.conf
@@ -41,8 +41,6 @@
 availability.regex.public = ACA.* | QAO-NC
 availability.regex.all = QAO.*
 
-kustvakt.management.registration=enable
-
 ## options referring to the security module!
 
 ## token expiration time in minutes!
@@ -50,7 +48,7 @@
 security.tokenTTL = 9S
 security.shortTokenTTL = 5S
 
-kustvakt.security.jwt.issuer=korap.ids-mannheim.de
+security.jwt.issuer=korap.ids-mannheim.de
 
 ## specifies the user data field that is used to salt user passwords
 security.passcode.salt=salt
