diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java
index 7b98a2f..51cfed0 100644
--- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java
+++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/update/Remove.java
@@ -76,7 +76,7 @@
 			} finally {
 				tt2.done();
 			}
-			cqlBatch = new CQLBatch(noAvg.debug(),session); 
+			cqlBatch = new CQLBatch(noAvg.info(),session); 
 
 
 		} finally {
diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFTrustChecker.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFTrustChecker.java
index 43e71e5..e3c1c9a 100644
--- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFTrustChecker.java
+++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFTrustChecker.java
@@ -26,6 +26,7 @@
 import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.Lur;
 import org.onap.aaf.cadi.TrustChecker;
+import org.onap.aaf.cadi.Access.Level;
 import org.onap.aaf.cadi.aaf.AAFPermission;
 import org.onap.aaf.cadi.config.Config;
 import org.onap.aaf.cadi.principal.TrustPrincipal;
@@ -100,6 +101,8 @@
         if (user_info == null) {
             return tresp;
         }
+        
+        tresp.getAccess().log(Level.DEBUG, user_info);
 
         String[] info = Split.split(',', user_info);
         String[] flds = Split.splitTrim(':', info[0]);
diff --git a/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AAFTrustChecker.java b/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AAFTrustChecker.java
index 64f4c99..f21aad6 100644
--- a/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AAFTrustChecker.java
+++ b/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AAFTrustChecker.java
@@ -35,6 +35,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.Lur;
 import org.onap.aaf.cadi.PropAccess;
 import org.onap.aaf.cadi.aaf.v2_0.AAFTrustChecker;
@@ -92,6 +93,7 @@
         assertThat(trustChecker.mayTrust(trespMock, reqMock), is(trespMock));
 
         when(reqMock.getHeader(null)).thenReturn("comma,comma,comma");
+        when(trespMock.getAccess()).thenReturn(Access.NULL);
         assertThat(trustChecker.mayTrust(trespMock, reqMock), is(trespMock));
 
         when(reqMock.getHeader(null)).thenReturn("colon:colon:colon:colon,comma,comma");
diff --git a/cadi/core/src/test/java/org/onap/aaf/cadi/taf/test/JU_EpiTaf.java b/cadi/core/src/test/java/org/onap/aaf/cadi/taf/test/JU_EpiTaf.java
index 08602cb..ed4591d 100644
--- a/cadi/core/src/test/java/org/onap/aaf/cadi/taf/test/JU_EpiTaf.java
+++ b/cadi/core/src/test/java/org/onap/aaf/cadi/taf/test/JU_EpiTaf.java
@@ -22,22 +22,21 @@
 
 package org.onap.aaf.cadi.taf.test;
 
-import static org.junit.Assert.*;
-import static org.hamcrest.CoreMatchers.*;
-import org.junit.*;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 import java.io.IOException;
 
+import org.junit.Test;
 import org.onap.aaf.cadi.Access;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.Taf;
-import org.onap.aaf.cadi.taf.TafResp;
-import org.onap.aaf.cadi.taf.TafResp.RESP;
-
-import org.onap.aaf.cadi.taf.EpiTaf;
-import org.onap.aaf.cadi.taf.NullTaf;
 import org.onap.aaf.cadi.Taf.LifeForm;
 import org.onap.aaf.cadi.principal.TaggedPrincipal;
+import org.onap.aaf.cadi.taf.EpiTaf;
+import org.onap.aaf.cadi.taf.NullTaf;
+import org.onap.aaf.cadi.taf.TafResp;
+import org.onap.aaf.cadi.taf.TafResp.RESP;
 
 public class JU_EpiTaf {
 
@@ -76,7 +75,7 @@
         @Override public RESP isAuthenticated() { return RESP.TRY_ANOTHER_TAF; } 
         @Override public RESP authenticate() throws IOException { return null; } 
         @Override public TaggedPrincipal getPrincipal() { return null; } 
-        @Override public Access getAccess() { return null; } 
+        @Override public Access getAccess() { return Access.NULL; } 
         @Override public boolean isFailedAttempt() { return false; }
         @Override public float timing() { return 0; }
         @Override public void timing(long start) {} 
@@ -93,7 +92,7 @@
         @Override public RESP isAuthenticated() { return RESP.TRY_AUTHENTICATING; } 
         @Override public RESP authenticate() throws IOException { return null; } 
         @Override public TaggedPrincipal getPrincipal() { return null; } 
-        @Override public Access getAccess() { return null; } 
+        @Override public Access getAccess() { return Access.NULL; } 
         @Override public boolean isFailedAttempt() { return false; } 
         @Override public float timing() { return 0; }
         @Override public void timing(long start) {} 
