diff --git a/src/main/java/caosdb/server/accessControl/SelfValidatingAuthenticationToken.java b/src/main/java/caosdb/server/accessControl/SelfValidatingAuthenticationToken.java
index 4eab50036f5a24e0c95664fe69e1a5f878a4aba2..119a86248b83a472df0d2981db43d9a6cc1962f0 100644
--- a/src/main/java/caosdb/server/accessControl/SelfValidatingAuthenticationToken.java
+++ b/src/main/java/caosdb/server/accessControl/SelfValidatingAuthenticationToken.java
@@ -147,7 +147,14 @@ public abstract class SelfValidatingAuthenticationToken extends Principal
   @Override
   public abstract String toString();
 
-  /** Implementation specific version of a peppered checksum. */
+  /**
+   * Implementation specific version of a peppered checksum.
+   *
+   * <p>For secure operation, implementing classes must make sure that the pepper is actually used
+   * in calculating the checksum and that the checksum can not be used to infer information about
+   * the pepper. This can be achieved for example by using the {@link calcChecksum(final Object...
+   * fields)} method.
+   */
   public abstract String calcChecksum(String pepper);
 
   /** No credentials (returns null), since this token is self-validating. */
@@ -214,7 +221,7 @@ public abstract class SelfValidatingAuthenticationToken extends Principal
       case "S":
         return SessionToken.parse(array);
       default:
-        throw new AuthenticationException("Could not parse the authtoken string.");
+        throw new AuthenticationException("Could not parse the authtoken string (unknown type).");
     }
   }
 
diff --git a/src/test/java/caosdb/server/authentication/AuthTokenTest.java b/src/test/java/caosdb/server/authentication/AuthTokenTest.java
index ea0807f5497dedb5c2d87d5f13a240ba3ef0ed7c..9f344889051d8508125dc5f6417d40839c44bd3d 100644
--- a/src/test/java/caosdb/server/authentication/AuthTokenTest.java
+++ b/src/test/java/caosdb/server/authentication/AuthTokenTest.java
@@ -128,15 +128,21 @@ public class AuthTokenTest {
     Assert.assertTrue(t6.isHashValid());
     Assert.assertFalse(t6.isValid());
 
-    Assert.assertEquals(t1.toString(), SessionToken.parse(t1.toString()).toString());
-    Assert.assertEquals(t3.toString(), SessionToken.parse(t3.toString()).toString());
-    Assert.assertEquals(t5.toString(), SessionToken.parse(t5.toString()).toString());
-    Assert.assertEquals(t6.toString(), SessionToken.parse(t6.toString()).toString());
-
-    Assert.assertFalse(SessionToken.parse(t1.toString()).isHashValid());
-    Assert.assertTrue(SessionToken.parse(t3.toString()).isHashValid());
-    Assert.assertTrue(SessionToken.parse(t5.toString()).isHashValid());
-    Assert.assertTrue(SessionToken.parse(t6.toString()).isHashValid());
+    // All tokens can be successfully parsed back.
+    final SelfValidatingAuthenticationToken t1p = SessionToken.parse(t1.toString());
+    final SelfValidatingAuthenticationToken t3p = SessionToken.parse(t3.toString());
+    final SelfValidatingAuthenticationToken t5p = SessionToken.parse(t5.toString());
+    final SelfValidatingAuthenticationToken t6p = SessionToken.parse(t6.toString());
+    Assert.assertEquals(t1.toString(), t1p.toString());
+    Assert.assertEquals(t3.toString(), t3p.toString());
+    Assert.assertEquals(t5.toString(), t5p.toString());
+    Assert.assertEquals(t6.toString(), t6p.toString());
+
+    // ... and parsed tokens have the correct hash validation
+    Assert.assertFalse(t1p.isHashValid());
+    Assert.assertTrue(t3p.isHashValid());
+    Assert.assertTrue(t5p.isHashValid());
+    Assert.assertTrue(t6p.isHashValid());
 
     Assert.assertFalse(
         AuthenticationUtils.parseSessionTokenCookie(
@@ -170,12 +176,13 @@ public class AuthTokenTest {
     Assert.assertTrue(t1.isValid());
 
     String serialized = t1.toString();
-    SelfValidatingAuthenticationToken parsed = OneTimeAuthenticationToken.parse(serialized);
+    OneTimeAuthenticationToken parsed =
+        (OneTimeAuthenticationToken) OneTimeAuthenticationToken.parse(serialized);
 
     Assert.assertEquals(t1, parsed);
     Assert.assertEquals(serialized, parsed.toString());
 
-    Assert.assertEquals(1L, t1.getMaxReplays());
+    Assert.assertEquals(1L, parsed.getMaxReplays());
     Assert.assertFalse(parsed.isExpired());
     Assert.assertTrue(parsed.isHashValid());
     Assert.assertTrue(parsed.isValid());