diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
index a798b6545a3f75aeeb3e6e1caec26431a7bafccc..118bb1bebd2d3457969fa5ebb86e1178961c6feb 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnectionPool.java
@@ -69,23 +69,22 @@
 
 package ca.nrc.cadc.ac.server.ldap;
 
+import org.apache.log4j.Logger;
+
 import ca.nrc.cadc.ac.server.ldap.LdapConfig.LdapPool;
 import ca.nrc.cadc.ac.server.ldap.LdapConfig.PoolPolicy;
 import ca.nrc.cadc.ac.server.ldap.LdapConfig.SystemState;
 import ca.nrc.cadc.net.TransientException;
 import ca.nrc.cadc.profiler.Profiler;
+
 import com.unboundid.ldap.sdk.FewestConnectionsServerSet;
-import com.unboundid.ldap.sdk.Filter;
 import com.unboundid.ldap.sdk.LDAPConnection;
 import com.unboundid.ldap.sdk.LDAPConnectionOptions;
 import com.unboundid.ldap.sdk.LDAPConnectionPool;
 import com.unboundid.ldap.sdk.LDAPException;
 import com.unboundid.ldap.sdk.RoundRobinServerSet;
-import com.unboundid.ldap.sdk.SearchRequest;
-import com.unboundid.ldap.sdk.SearchScope;
 import com.unboundid.ldap.sdk.ServerSet;
 import com.unboundid.ldap.sdk.SimpleBindRequest;
-import org.apache.log4j.Logger;
 
 /**
  * This object is designed to be shared between the DAO classes
@@ -99,8 +98,6 @@ public class LdapConnectionPool
 {
     private static final Logger logger = Logger.getLogger(LdapConnectionPool.class);
 
-    Profiler profiler = new Profiler(LdapConnectionPool.class);
-
     protected LdapConfig currentConfig;
     private String poolName;
     private LDAPConnectionPool pool;
@@ -129,6 +126,7 @@ public class LdapConnectionPool
         logger.debug("Construct pool: " + poolName + ". system state: " + systemState);
         if (SystemState.ONLINE.equals(systemState) || (SystemState.READONLY.equals(systemState) && readOnly))
         {
+            Profiler profiler = new Profiler(LdapConnectionPool.class);
             synchronized (poolMonitor)
             {
                 if (!boundPool)
@@ -168,23 +166,27 @@ public class LdapConnectionPool
 
         try
         {
+            Profiler profiler = new Profiler(LdapConnectionPool.class);
             LDAPConnection conn = null;
             synchronized (poolMonitor)
             {
                 conn = pool.getConnection();
-                profiler.checkpoint("pool.getConnection");
 
                 // BM: This query to the base dn (starting at dc=) has the
                 // effect of clearing any proxied authorization state associated
                 // with the receiving ldap server connection.  Without this in
                 // place, proxied authorization information is sometimes ignored.
-                logger.debug("Testing connection");
-                int dcIndex = currentConfig.getGroupsDN().indexOf("dc=");
-                String dcDN = currentConfig.getGroupsDN().substring(dcIndex);
-                Filter filter = Filter.createEqualityFilter("dc", "*");
-                SearchRequest searchRequest = new SearchRequest(dcDN, SearchScope.BASE, filter, new String[] {"entrydn"});
-                conn.search(searchRequest);
-                profiler.checkpoint("pool.initConnection");
+//                logger.debug("Testing connection");
+//                int index = currentConfig.getGroupsDN().indexOf(',');
+//                String rdn = currentConfig.getGroupsDN().substring(0, index);
+//                Filter filter = Filter.create("(" + rdn + ")");
+//
+//                index = rdn.indexOf('=');
+//                String attribute = rdn.substring(0, index);
+//
+//                SearchRequest searchRequest = new SearchRequest(currentConfig.getGroupsDN(), SearchScope.BASE, filter, new String[] {attribute});
+//                conn.search(searchRequest);
+//                profiler.checkpoint("pool.initConnection");
             }
             logger.debug(poolName + " pool statistics after borrow:\n" + pool.getConnectionPoolStatistics());
             profiler.checkpoint("get " + poolName + " only connection");
@@ -202,7 +204,9 @@ public class LdapConnectionPool
     {
         if (pool != null)
         {
+            Profiler profiler = new Profiler(LdapConnectionPool.class);
             pool.releaseConnection(conn);
+            profiler.checkpoint("pool.releaseConnection");
             logger.debug(poolName + " pool statistics after release:\n" + pool.getConnectionPoolStatistics());
         }
     }
@@ -217,8 +221,9 @@ public class LdapConnectionPool
         if (pool != null)
         {
             logger.debug("Closing pool...");
+            Profiler profiler = new Profiler(LdapConnectionPool.class);
             pool.close();
-            profiler.checkpoint("Pool closed.");
+            profiler.checkpoint("pool.shutdown");
         }
     }
 
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
index cf5451e997fc29f48711ae72f3a77586669975c2..bef5ff93bfdcc554d55b72f272792c83226d6d0c 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapConnections.java
@@ -91,8 +91,6 @@ class LdapConnections
 {
     private final static Logger log = Logger.getLogger(LdapConnections.class);
 
-    Profiler profiler = new Profiler(LdapConnections.class);
-
     private LdapPersistence persistence;
     private LdapConfig config;
 
@@ -134,6 +132,7 @@ class LdapConnections
             if (autoConfigReadOnlyConn == null)
             {
                 log.debug("Getting new auto config read only connection.");
+                Profiler profiler = new Profiler(LdapConnections.class);
                 autoConfigReadOnlyConn = readOnlyPool.getConnection();
                 profiler.checkpoint("Get read only connection");
             }
@@ -173,6 +172,7 @@ class LdapConnections
             if (autoConfigReadWriteConn == null)
             {
                 log.debug("Getting new auto config read write connection.");
+                Profiler profiler = new Profiler(LdapConnections.class);
                 autoConfigReadWriteConn = readWritePool.getConnection();
                 profiler.checkpoint("Get read write connection");
             }
@@ -212,6 +212,7 @@ class LdapConnections
             if (autoConfigUnboundReadOnlyConn == null)
             {
                 log.debug("Getting new auto config unbound read only connection.");
+                Profiler profiler = new Profiler(LdapConnections.class);
                 autoConfigUnboundReadOnlyConn = unboundReadOnlyPool.getConnection();
                 profiler.checkpoint("Get read write connection");
             }
@@ -242,6 +243,7 @@ class LdapConnections
 
     void releaseConnections()
     {
+        Profiler profiler = new Profiler(LdapConnections.class);
         if (persistence != null)
         {
             if (autoConfigReadOnlyConn != null)
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
index 6d3505a936cc0a63fc4e94a4d029eca0f1dfdc57..35a06d069e9e32b550e2fcdfb45433dab6554363 100755
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapDAO.java
@@ -90,8 +90,6 @@ public abstract class LdapDAO
 
     DN subjDN = null;
 
-    private Profiler profiler = new Profiler(LdapDAO.class);
-
     public LdapDAO(LdapConnections connections)
     {
         this.connections = connections;
@@ -179,8 +177,8 @@ public abstract class LdapDAO
 
         if (config.isSecure())
         {
-            socketFactory = createSSLSocketFactory();
             Profiler profiler = new Profiler(LdapDAO.class);
+            socketFactory = createSSLSocketFactory();
             profiler.checkpoint("createSSLSocketFactory");
         }
         else
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
index e0773cefe5011fef6e490ec3792761edf3aecb22..30897950e64ffc64411b1dee095d79cfe513af5d 100755
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
@@ -141,8 +141,6 @@ public class LdapGroupDAO extends LdapDAO
                     LDAP_MODIFY_TIMESTAMP, LDAP_DESCRIPTION, LDAP_UNIQUE_MEMBER
             };
 
-    private final Profiler profiler = new Profiler(LdapGroupDAO.class);
-
     private LdapUserDAO userDAO;
 
     // this gets filled by the LdapgroupPersistence
@@ -379,6 +377,7 @@ public class LdapGroupDAO extends LdapDAO
             SearchResult searchResult = null;
             try
             {
+                Profiler profiler = new Profiler(LdapGroupDAO.class);
                 LDAPInterface con = getReadOnlyConnection();
                 profiler.checkpoint("getGroupNames.getConnection");
                 searchResult = con.search(searchRequest);
@@ -397,7 +396,7 @@ public class LdapGroupDAO extends LdapDAO
             }
 
             LdapDAO.checkLdapResult(searchResult.getResultCode());
-            profiler.checkpoint("checkLdapResult");
+//            profiler.checkpoint("checkLdapResult");
 
             return groupNames;
         }
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
index 2e7c75da3e6bdd3cc2caf746ebcd16a461189415..37b1e4f92847ca9cee5cc9b72879022857cce60b 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapPersistence.java
@@ -97,8 +97,6 @@ public abstract class LdapPersistence
     private static final String LDAP_POOL_JNDI_NAME = ConnectionPools.class.getName();
     private static final int POOL_CHECK_INTERVAL_MILLESCONDS = 10000; // 10 seconds
 
-    Profiler profiler = new Profiler(LdapPersistence.class);
-
     // static monitor is required for when multiple LdapPersistence objects
     // are created.
     private static Object jndiMonitor = new Object();
@@ -208,6 +206,7 @@ public abstract class LdapPersistence
                     }
                     if (pools == null)
                     {
+                        Profiler profiler = new Profiler(LdapPersistence.class);
                         LdapConfig config = LdapConfig.getLdapConfig();
                         pools = createPools(config);
                         InitialContext ic = new InitialContext();
@@ -238,6 +237,7 @@ public abstract class LdapPersistence
 
     private ConnectionPools createPools(LdapConfig config)
     {
+        Profiler profiler = new Profiler(LdapPersistence.class);
         Map<String,LdapConnectionPool> poolMap = new HashMap<String,LdapConnectionPool>(3);
         poolMap.put(POOL_READONLY, new LdapConnectionPool(
             config, config.getReadOnlyPool(), POOL_READONLY, true, true));
@@ -276,6 +276,7 @@ public abstract class LdapPersistence
             else
             {
                 logger.debug("Detected ldap configuration change, rebuilding pools");
+                Profiler profiler = new Profiler(LdapPersistence.class);
                 boolean poolRecreated = false;
                 final ConnectionPools oldPools = pools;
                 ConnectionPools newPools = null;
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
index f857f1be5c6307741074ab1e27d8910b913e6731..8dcebdcf9d46fae9011bf47cb6132ed63051008b 100755
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java
@@ -140,8 +140,6 @@ public class LdapUserDAO extends LdapDAO
 
     private static final Logger logger = Logger.getLogger(LdapUserDAO.class);
 
-    private final Profiler profiler = new Profiler(LdapUserDAO.class);
-
     private String internalIdUriPrefix = AC.USER_URI;
 
     // Map of identity type to LDAP attribute
@@ -680,8 +678,8 @@ public class LdapUserDAO extends LdapDAO
     public User getAugmentedUser(final Principal userID)
         throws UserNotFoundException, TransientException
     {
+        Profiler profiler = new Profiler(LdapUserDAO.class);
         String searchField = userLdapAttrib.get(userID.getClass());
-        profiler.checkpoint("getAugmentedUser.getSearchField");
         if (searchField == null)
         {
             throw new IllegalArgumentException("getAugmentedUser: unsupported principal type " +
@@ -709,9 +707,10 @@ public class LdapUserDAO extends LdapDAO
 
             SearchRequest searchRequest = new SearchRequest(
                 config.getUsersDN(), SearchScope.ONE, filter, identityAttribs);
-            profiler.checkpoint("getAugmentedUser.createSearchRequest");
 
-            SearchResultEntry searchResult = getReadOnlyConnection().searchForEntry(searchRequest);
+            LDAPConnection con = getReadOnlyConnection();
+            profiler.checkpoint("getAugmentedUser.getReadOnlyConnection");
+            SearchResultEntry searchResult = con.searchForEntry(searchRequest);
             profiler.checkpoint("getAugmentedUser.searchForEntry");
 
             if (searchResult == null)
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
index c24c02c121884e1cfc021b67dae9fe98acdca90e..10b8448d7e7a6806f18be008dd9696b6faa4138c 100755
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserPersistence.java
@@ -90,7 +90,6 @@ import ca.nrc.cadc.profiler.Profiler;
 public class LdapUserPersistence extends LdapPersistence implements UserPersistence
 {
     private static final Logger logger = Logger.getLogger(LdapUserPersistence.class);
-    private Profiler profiler = new Profiler(LdapUserPersistence.class);
 
     public LdapUserPersistence()
     {
@@ -244,7 +243,8 @@ public class LdapUserPersistence extends LdapPersistence implements UserPersiste
         }
     }
 
-    /**
+    /**<<<<<<< HEAD
+
      * Get the user specified by userID with all of the users identities.
      *
      * @param userID The userID.
@@ -263,6 +263,7 @@ public class LdapUserPersistence extends LdapPersistence implements UserPersiste
         LdapConnections conns = new LdapConnections(this);
         try
         {
+            Profiler profiler = new Profiler(LdapUserPersistence.class);
             userDAO = getLdapUserDao(conns);
             profiler.checkpoint("Create LdapUserDAO");
             User user = userDAO.getAugmentedUser(userID);
@@ -509,7 +510,11 @@ public class LdapUserPersistence extends LdapPersistence implements UserPersiste
     /**
      * Update a user's password. The given user and authenticating user must match.
      *
+<<<<<<< HEAD
      * @param userID        the user.
+=======
+     * @param userID
+>>>>>>> efc84b5d25584bd3014fc6cbc820c5acf0d90a2a
      * @param oldPassword   current password.
      * @param newPassword   new password.
      * @throws UserNotFoundException If the given user does not exist.
@@ -543,7 +548,11 @@ public class LdapUserPersistence extends LdapPersistence implements UserPersiste
     /**
      * Reset a user's password. The given user and authenticating user must match.
      *
+<<<<<<< HEAD
      * @param userID        The user.
+=======
+     * @param userID
+>>>>>>> efc84b5d25584bd3014fc6cbc820c5acf0d90a2a
      * @param newPassword   new password.
      * @throws UserNotFoundException If the given user does not exist.
      * @throws TransientException   If an temporary, unexpected problem occurred.
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java
index 7f212ab3fdbdac02303a4c993092152251afa22a..ef27f7424ef9d255a4fa20f44335dc1371414774 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/UserServlet.java
@@ -181,7 +181,7 @@ public class UserServlet extends HttpServlet
             log.debug("create action " + action.getClass().getSimpleName());
             action.setAcceptedContentType(getAcceptedContentType(request));
             log.debug("content-type: " + getAcceptedContentType(request));
-            profiler.checkpoint("created action");
+//            profiler.checkpoint("created action");
 
             Subject subject;
             Subject privilegedSubject = getPrivilegedSubject(request);
@@ -289,6 +289,7 @@ public class UserServlet extends HttpServlet
         }
         finally
         {
+            profiler.checkpoint("Action complete");
             logInfo.setElapsedTime(System.currentTimeMillis() - start);
             log.info(logInfo.end());
         }
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
index e676063153a80ec1474821930bf43ec44c88d24f..631e28f552e68e91e065c488635d599626b58445 100755
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/groups/ModifyGroupAction.java
@@ -75,6 +75,7 @@ import java.util.List;
 import ca.nrc.cadc.ac.Group;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.xml.GroupReader;
+import ca.nrc.cadc.profiler.Profiler;
 
 public class ModifyGroupAction extends AbstractGroupAction
 {
@@ -92,10 +93,14 @@ public class ModifyGroupAction extends AbstractGroupAction
 
     public void doAction() throws Exception
     {
+        Profiler profiler = new Profiler(ModifyGroupAction.class);
         GroupReader groupReader = new GroupReader();
         Group group = groupReader.read(this.inputStream);
         Group oldGroup = groupPersistence.getGroup(this.groupName);
+        profiler.checkpoint("get Group");
+
         groupPersistence.modifyGroup(group);
+        profiler.checkpoint("modify Group");
 
         List<String> addedMembers = new ArrayList<String>();
         for (User member : group.getUserMembers())
@@ -130,6 +135,7 @@ public class ModifyGroupAction extends AbstractGroupAction
             deletedMembers = null;
         }
         logGroupInfo(group.getID(), deletedMembers, addedMembers);
+        profiler.checkpoint("log GroupInfo");
 
         syncOut.setHeader("Location", request);
         syncOut.setCode(303);
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
index c8a007aee7930201e2e5f379e447a91d410fd290..95453c1735db196a39265f29311ece0ebdfeabe2 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/AbstractUserAction.java
@@ -81,14 +81,17 @@ import ca.nrc.cadc.ac.ReaderException;
 import ca.nrc.cadc.ac.User;
 import ca.nrc.cadc.ac.UserAlreadyExistsException;
 import ca.nrc.cadc.ac.UserNotFoundException;
+import ca.nrc.cadc.ac.UserRequest;
 import ca.nrc.cadc.ac.WriterException;
 import ca.nrc.cadc.ac.json.JsonUserListWriter;
 import ca.nrc.cadc.ac.json.JsonUserReader;
+import ca.nrc.cadc.ac.json.JsonUserRequestReader;
 import ca.nrc.cadc.ac.json.JsonUserWriter;
 import ca.nrc.cadc.ac.server.UserPersistence;
 import ca.nrc.cadc.ac.server.web.SyncOutput;
 import ca.nrc.cadc.ac.xml.UserListWriter;
 import ca.nrc.cadc.ac.xml.UserReader;
+import ca.nrc.cadc.ac.xml.UserRequestReader;
 import ca.nrc.cadc.ac.xml.UserWriter;
 import ca.nrc.cadc.net.TransientException;
 import ca.nrc.cadc.profiler.Profiler;
@@ -98,7 +101,6 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
     private static final Logger log = Logger.getLogger(AbstractUserAction.class);
     public static final String DEFAULT_CONTENT_TYPE = "text/xml";
     public static final String JSON_CONTENT_TYPE = "application/json";
-    private Profiler profiler = new Profiler(AbstractUserAction.class);
 
     protected boolean isPrivilegedUser;
     protected boolean isPrivilegedSubject;
@@ -154,6 +156,7 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
     {
         try
         {
+            Profiler profiler = new Profiler(AbstractUserAction.class);
             doAction();
             profiler.checkpoint("doAction");
         }
@@ -227,6 +230,7 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
 
     private void sendError(int responseCode, String message)
     {
+        Profiler profiler = new Profiler(AbstractUserAction.class);
         syncOut.setCode(responseCode);
         syncOut.setHeader("Content-Type", "text/plain");
         if (message != null)
@@ -253,6 +257,40 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
         this.acceptedContentType = acceptedContentType;
     }
 
+    /**
+     * Read a user request (User pending approval) from the HTTP Request's
+     * stream.
+     *
+     * @param inputStream           The Input Stream to read from.
+     * @return                      User Request instance.
+     * @throws IOException          Any reading errors.
+     */
+    protected final UserRequest readUserRequest(
+            final InputStream inputStream) throws ReaderException, IOException
+    {
+        Profiler profiler = new Profiler(AbstractUserAction.class);
+        final UserRequest userRequest;
+
+        if (acceptedContentType.equals(DEFAULT_CONTENT_TYPE))
+        {
+            UserRequestReader requestReader = new UserRequestReader();
+            userRequest = requestReader.read(inputStream);
+        }
+        else if (acceptedContentType.equals(JSON_CONTENT_TYPE))
+        {
+            JsonUserRequestReader requestReader = new JsonUserRequestReader();
+            userRequest = requestReader.read(inputStream);
+        }
+        else
+        {
+            // Should never happen.
+            throw new IOException("Unknown content being asked for: "
+                                  + acceptedContentType);
+        }
+        profiler.checkpoint("readUserRequest");
+        return userRequest;
+    }
+
     /**
      * Read the user from the given stream of marshalled data.
      *
@@ -264,6 +302,7 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
     protected User readUser(final InputStream inputStream)
         throws ReaderException, IOException
     {
+        Profiler profiler = new Profiler(AbstractUserAction.class);
         syncOut.setHeader("Content-Type", acceptedContentType);
         final User user;
 
@@ -296,6 +335,7 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
     protected void writeUser(final User user)
         throws WriterException, IOException
     {
+        Profiler profiler = new Profiler(AbstractUserAction.class);
         syncOut.setHeader("Content-Type", acceptedContentType);
         final Writer writer = syncOut.getWriter();
 
@@ -320,6 +360,7 @@ public abstract class AbstractUserAction implements PrivilegedExceptionAction<Ob
     protected void writeUsers(final Collection<User> users)
         throws WriterException, IOException
     {
+        Profiler profiler = new Profiler(AbstractUserAction.class);
         syncOut.setHeader("Content-Type", acceptedContentType);
         final Writer writer = syncOut.getWriter();
 
diff --git a/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java b/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
index 5c1f0a3deba0d447a33ad61063c30bc46d649fe7..06714bb480b2696f99601c0b9791ed73178d2b5f 100644
--- a/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
+++ b/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
@@ -94,8 +94,6 @@ public class AuthenticatorImpl implements Authenticator
 {
     private static final Logger log = Logger.getLogger(AuthenticatorImpl.class);
 
-    private Profiler profiler = new Profiler(AuthenticatorImpl.class);
-
     public AuthenticatorImpl() { }
 
     /**
@@ -104,6 +102,7 @@ public class AuthenticatorImpl implements Authenticator
      */
     public Subject getSubject(Subject subject)
     {
+        Profiler profiler = new Profiler(AuthenticatorImpl.class);
         log.debug("ac augment subject: " + subject);
         AuthMethod am = AuthenticationUtil.getAuthMethod(subject);
         if (am == null || AuthMethod.ANON.equals(am))
@@ -135,6 +134,7 @@ public class AuthenticatorImpl implements Authenticator
     {
         try
         {
+            Profiler profiler = new Profiler(AuthenticatorImpl.class);
             PluginFactory pluginFactory = new PluginFactory();
             UserPersistence userPersistence = pluginFactory.createUserPersistence();
             User user = userPersistence.getAugmentedUser(subject.getPrincipals().iterator().next());