diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
index 2055a6b..9f95d6f 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
@@ -60,7 +60,7 @@
      * 
      * @return
      */
-    public String createRandomNumber(Object ... obj);
+    public String createRandomNumber (Object ... obj);
 
 
     public String encodeBase ();
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
index 58e7a44..dbf07ac 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
@@ -55,12 +55,6 @@
 
 
     @Override
-    public String getSalt (User user) {
-        return null;
-    }
-
-
-    @Override
     public String createToken (boolean hash, Object ... obj) {
         return createToken();
 
@@ -74,7 +68,7 @@
 
 
     @Override
-    public String createRandomNumber(Object ... obj) {
+    public String createRandomNumber (Object ... obj) {
         return createToken();
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
index 69777e9..f1e4783 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
@@ -222,7 +222,7 @@
 
 
     @Override
-    public String createRandomNumber(Object ... obj) {
+    public String createRandomNumber (Object ... obj) {
         final byte[] rNumber = SecureRGenerator
                 .getNextSecureRandom(SecureRGenerator.CORPUS_RANDOM_SIZE);
         if (obj.length != 0) {
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 506dafe..aa1c6d9 100644
--- a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -111,7 +111,8 @@
                 list.remove(iface);
             }
             if (!list.isEmpty()) {
-                System.out.println("Following bootup classes raised errors: "+ list);
+                System.out.println("Following bootup classes raised errors: "
+                        + list);
                 break;
             }
         }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
index fbd2d9c..8a56efb 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2HandlerTest.java
@@ -27,27 +27,6 @@
     private static final String SCOPES = "search preferences queries account";
 
 
-    @BeforeClass
-    public static void setup () throws Exception {
-        //        BeanConfiguration.loadClasspathContext("default-config.xml");
-        //        handler = new OAuth2Handler(
-        //                BeanConfiguration.getKustvaktContext().getPersistenceClient());
-        //        crypto = BeanConfiguration.getKustvaktContext().getEncryption();
-        //        info = new ClientInfo(crypto.createID(), crypto.createToken());
-        //        info.setConfidential(true);
-        //        //todo: support for subdomains?!
-        //        info.setUrl("http://localhost:8080/api/v0.1");
-        //        info.setRedirect_uri("testwebsite/login");
-        //
-        //        helper = TestHelper.newInstance();
-        //        helper.setupAccount();
-        //        PersistenceClient cl = helper.getBean(ContextHolder.KUSTVAKT_DB);
-        //        handler = new OAuth2Handler(cl);
-        //        handler.registerClient(info, helper.getUser());
-        //        crypto = helper.getBean(ContextHolder.KUSTVAKT_ENCRYPTION);
-    }
-
-
     @Test
     public void testStoreAuthorizationCodeThrowsNoException ()
             throws KustvaktException {
