diff --git a/library/src/main/java/io/mifos/anubis/repository/TenantAuthorizationDataRepository.java b/library/src/main/java/io/mifos/anubis/repository/TenantAuthorizationDataRepository.java
index ef1f118..5d64422 100644
--- a/library/src/main/java/io/mifos/anubis/repository/TenantAuthorizationDataRepository.java
+++ b/library/src/main/java/io/mifos/anubis/repository/TenantAuthorizationDataRepository.java
@@ -27,7 +27,6 @@
 import io.mifos.anubis.config.TenantSignatureRepository;
 import io.mifos.core.cassandra.core.CassandraSessionProvider;
 import io.mifos.core.lang.ApplicationName;
-import io.mifos.core.lang.ServiceException;
 import io.mifos.core.lang.security.RsaKeyPairFactory;
 import io.mifos.core.lang.security.RsaPrivateKeyBuilder;
 import io.mifos.core.lang.security.RsaPublicKeyBuilder;
@@ -102,6 +101,9 @@
     Assert.notNull(identityManagerSignature);
 
     //TODO: add validation to make sure this timestamp is more recent than any already stored.
+    logger.info("Creating application signature set for timestamp '" + timestamp +
+            "'. Identity manager signature is: " + identityManagerSignature);
+
     final RsaKeyPairFactory.KeyPairHolder applicationSignature = RsaKeyPairFactory.createKeyPair();
 
     final Session session = cassandraSessionProvider.getTenantSession();
@@ -123,6 +125,7 @@
     Assert.notNull(timestamp);
     //Don't actually delete, just invalidate, so that if someone starts coming at me with an older keyset, I'll
     //know what's happening.
+    logger.info("Invalidationg signature set for timestamp '" + timestamp + "'.");
     final Session session = cassandraSessionProvider.getTenantSession();
     invalidateEntry(session, timestamp);
   }
diff --git a/library/src/main/java/io/mifos/anubis/security/GuestAuthenticator.java b/library/src/main/java/io/mifos/anubis/security/GuestAuthenticator.java
index 533868c..6c9270a 100644
--- a/library/src/main/java/io/mifos/anubis/security/GuestAuthenticator.java
+++ b/library/src/main/java/io/mifos/anubis/security/GuestAuthenticator.java
@@ -18,27 +18,36 @@
 import io.mifos.anubis.annotation.AcceptedTokenType;
 import io.mifos.anubis.api.v1.RoleConstants;
 import io.mifos.anubis.service.PermittableService;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import java.util.Set;
 
+import static io.mifos.anubis.config.AnubisConstants.LOGGER_NAME;
+
 /**
  * @author Myrle Krantz
  */
 @Component
 public class GuestAuthenticator {
   private Set<ApplicationPermission> permissions;
+  private final Logger logger;
 
   @Autowired
-  public GuestAuthenticator(final PermittableService permittableService) {
+  public GuestAuthenticator(final PermittableService permittableService,
+                            final @Qualifier(LOGGER_NAME) Logger logger) {
     this.permissions = permittableService.getPermittableEndpointsAsPermissions(AcceptedTokenType.GUEST);
+    this.logger = logger;
   }
 
   AnubisAuthentication authenticate(final String user) {
     if (!user.equals(RoleConstants.GUEST_USER_IDENTIFIER))
       throw AmitAuthenticationException.invalidHeader();
 
+    logger.info("Guest access \"authenticated\" successfully.", user);
+
     return new AnubisAuthentication(null, RoleConstants.GUEST_USER_IDENTIFIER, permissions);
   }
 }
diff --git a/library/src/main/java/io/mifos/anubis/security/SystemAuthenticator.java b/library/src/main/java/io/mifos/anubis/security/SystemAuthenticator.java
index 49fd679..6250321 100644
--- a/library/src/main/java/io/mifos/anubis/security/SystemAuthenticator.java
+++ b/library/src/main/java/io/mifos/anubis/security/SystemAuthenticator.java
@@ -62,20 +62,21 @@
   public AnubisAuthentication authenticate(
       final String user,
       final String token,
-      final String timestamp) {
+      final String keyTimestamp) {
     if (!user.equals(ApiConstants.SYSTEM_SU))
       throw AmitAuthenticationException.invalidHeader();
 
     try {
       final JwtParser jwtParser = Jwts.parser()
-          .setSigningKey(systemRsaKeyProvider.getPublicKey(timestamp))
+          .setSigningKey(systemRsaKeyProvider.getPublicKey(keyTimestamp))
           .requireAudience(applicationName.toString())
           .requireIssuer(TokenType.SYSTEM.getIssuer())
-          .require(TokenConstants.JWT_SIGNATURE_TIMESTAMP_CLAIM, timestamp);
+          .require(TokenConstants.JWT_SIGNATURE_TIMESTAMP_CLAIM, keyTimestamp);
 
       TenantContextHolder.identifier().ifPresent(jwtParser::requireSubject);
 
       jwtParser.parse(token);
+      logger.info("System token for user {}, with key timestamp {} authenticated successfully.", user, keyTimestamp);
 
       return new AnubisAuthentication(token, user, permissions);
     }
@@ -83,7 +84,7 @@
       logger.debug("token = {}", token);
       throw AmitAuthenticationException.invalidToken();
     } catch (final InvalidKeyTimestampException e) {
-      throw AmitAuthenticationException.invalidTokenKeyTimestamp("system", timestamp);
+      throw AmitAuthenticationException.invalidTokenKeyTimestamp("system", keyTimestamp);
     }
   }
 }
diff --git a/library/src/main/java/io/mifos/anubis/security/TenantAuthenticator.java b/library/src/main/java/io/mifos/anubis/security/TenantAuthenticator.java
index d604ba3..35e4797 100644
--- a/library/src/main/java/io/mifos/anubis/security/TenantAuthenticator.java
+++ b/library/src/main/java/io/mifos/anubis/security/TenantAuthenticator.java
@@ -26,6 +26,7 @@
 import io.mifos.anubis.service.PermittableService;
 import io.mifos.anubis.token.TokenType;
 import io.mifos.core.lang.ApplicationName;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -36,6 +37,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static io.mifos.anubis.config.AnubisConstants.LOGGER_NAME;
+
 /**
  * @author Myrle Krantz
  */
@@ -45,18 +48,21 @@
   private final String applicationNameWithVersion;
   private final Gson gson;
   private final Set<ApplicationPermission> guestPermissions;
+  private final Logger logger;
 
   @Autowired
   public TenantAuthenticator(
       final TenantRsaKeyProvider tenantRsaKeyProvider,
       final ApplicationName applicationName,
       final PermittableService permittableService,
-      final @Qualifier("anubisGson") Gson gson) {
+      final @Qualifier("anubisGson") Gson gson,
+      final @Qualifier(LOGGER_NAME) Logger logger) {
     this.tenantRsaKeyProvider = tenantRsaKeyProvider;
     this.applicationNameWithVersion = applicationName.toString();
     this.gson = gson;
     this.guestPermissions
         = permittableService.getPermittableEndpointsAsPermissions(AcceptedTokenType.GUEST);
+    this.logger = logger;
   }
 
   AnubisAuthentication authenticate(
@@ -79,6 +85,8 @@
       final Set<ApplicationPermission> permissions = translatePermissions(tokenContent.getTokenPermissions());
       permissions.addAll(guestPermissions);
 
+      logger.info("Tenant token for user {}, with key timestamp {} authenticated successfully.", user, keyTimestamp);
+
       return new AnubisAuthentication(token,
           jwt.getBody().getSubject(), permissions
       );
diff --git a/library/src/main/java/io/mifos/anubis/security/UrlPermissionChecker.java b/library/src/main/java/io/mifos/anubis/security/UrlPermissionChecker.java
index 957279e..6da4d59 100644
--- a/library/src/main/java/io/mifos/anubis/security/UrlPermissionChecker.java
+++ b/library/src/main/java/io/mifos/anubis/security/UrlPermissionChecker.java
@@ -22,6 +22,7 @@
 import org.springframework.security.web.FilterInvocation;
 
 import java.util.Collection;
+import java.util.Optional;
 
 /**
  * @author Myrle Krantz
@@ -48,10 +49,11 @@
     final AnubisAuthentication authentication = (AnubisAuthentication) unAuthentication;
 
     final Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
-    return authorities.stream()
-        .map(x -> (ApplicationPermission)x)
-        .filter(x -> x.matches(filterInvocation, authentication.getPrincipal()))
-        .findAny()
-        .map(x -> ACCESS_GRANTED).orElse(ACCESS_DENIED);
+    final Optional<ApplicationPermission> matchedPermission = authorities.stream()
+            .map(x -> (ApplicationPermission) x)
+            .filter(x -> x.matches(filterInvocation, authentication.getPrincipal()))
+            .findAny();
+
+    return matchedPermission.map(x -> ACCESS_GRANTED).orElse(ACCESS_DENIED);
   }
 }
