diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
index 19c6ab34bbee37a92b2d0669f1e8b6763980c7af..6ceca04328afecd0a281618cd0c089185452c251 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
@@ -68,11 +68,14 @@
  */
 package ca.nrc.cadc.ac.server.web;
 
+import java.security.AccessControlContext;
 import java.security.AccessControlException;
+import java.security.AccessController;
 import java.security.Principal;
 import java.util.Collection;
 import java.util.Date;
 
+import javax.security.auth.Subject;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.log4j.Logger;
@@ -84,7 +87,6 @@ import ca.nrc.cadc.ac.UserNotFoundException;
 import ca.nrc.cadc.ac.server.GroupPersistence;
 import ca.nrc.cadc.ac.server.PluginFactory;
 import ca.nrc.cadc.ac.server.RequestValidator;
-import ca.nrc.cadc.auth.AuthenticationUtil;
 import ca.nrc.cadc.net.TransientException;
 import ca.nrc.cadc.uws.ExecutionPhase;
 import ca.nrc.cadc.uws.Job;
@@ -154,6 +156,8 @@ public class ACSearchRunner implements JobRunner
         
         try
         {
+
+            
             ExecutionPhase ep = 
                 jobUpdater.setPhase(job.getID(), ExecutionPhase.QUEUED, 
                                     ExecutionPhase.EXECUTING, new Date());
@@ -166,6 +170,23 @@ public class ACSearchRunner implements JobRunner
             RequestValidator rv = new RequestValidator();
             rv.validate(job.getParameterList());
             
+            // only allow users to search themselves...
+            Principal userBeingSearched = rv.getPrincipal();
+            if (userBeingSearched != null)
+            {
+                AccessControlContext acContext = AccessController.getContext();
+                Subject subject = Subject.getSubject(acContext);
+                boolean idMatch = false;
+                for (Principal p : subject.getPrincipals())
+                {
+                    if (p.equals(userBeingSearched))
+                        idMatch = true;
+                }
+                if (!idMatch)
+                    throw new AccessControlException("Can only search oneself.");
+            }
+
+            
             PluginFactory factory = new PluginFactory();
             GroupPersistence dao = factory.getGroupPersistence();
             Collection<Group> groups = 
@@ -246,7 +267,7 @@ public class ACSearchRunner implements JobRunner
             logInfo.setMessage(t.getMessage());
             log.debug("FAIL", t);
             
-            syncOut.setResponseCode(401);
+            syncOut.setResponseCode(403);
             
 //            ErrorSummary errorSummary =
 //                new ErrorSummary(t.getMessage(), ErrorType.FATAL);
@@ -284,36 +305,4 @@ public class ACSearchRunner implements JobRunner
         }
     }
     
-//    private Principal getUserPrincipal(String userID, IdentityType type)
-//    {
-//        if (type == IdentityType.OPENID)
-//        {
-//            return new OpenIdPrincipal(userID);
-//        }
-//        if (type == IdentityType.UID)
-//        {
-//            try
-//            {
-//                Long numericId = Long.valueOf(userID);
-//                return new NumericPrincipal(numericId);
-//            }
-//            catch (NumberFormatException e)
-//            {
-//                throw new IllegalArgumentException("Illegal UID userID " +
-//                                                   userID + " because " +
-//                                                   e.getMessage());
-//            }
-//        }
-//        if (type == IdentityType.USERNAME)
-//        {
-//            return new HttpPrincipal(userID);
-//        }
-//        if (type == IdentityType.X500)
-//        {
-//            return new X500Principal(userID);
-//        }
-//        throw new IllegalArgumentException("Unknown user type " + 
-//                                           type.getValue());
-//    }
-    
 }
diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java
index e1846d21afb1c07032606f2d7344dd077543e550..02f64926a9982e7ae88b89bed6c054087cb473a9 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsAction.java
@@ -68,26 +68,28 @@
  */
 package ca.nrc.cadc.ac.server.web;
 
-import ca.nrc.cadc.ac.GroupAlreadyExistsException;
-import ca.nrc.cadc.ac.GroupNotFoundException;
-import ca.nrc.cadc.ac.MemberAlreadyExistsException;
-import ca.nrc.cadc.ac.MemberNotFoundException;
-import ca.nrc.cadc.ac.UserNotFoundException;
-import ca.nrc.cadc.ac.server.GroupPersistence;
-import ca.nrc.cadc.ac.server.PluginFactory;
-import ca.nrc.cadc.ac.server.UserPersistence;
-import ca.nrc.cadc.net.TransientException;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.security.AccessControlException;
 import java.security.Principal;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.List;
+
 import javax.security.auth.Subject;
 import javax.servlet.http.HttpServletResponse;
+
 import org.apache.log4j.Logger;
 
+import ca.nrc.cadc.ac.GroupAlreadyExistsException;
+import ca.nrc.cadc.ac.GroupNotFoundException;
+import ca.nrc.cadc.ac.MemberAlreadyExistsException;
+import ca.nrc.cadc.ac.MemberNotFoundException;
+import ca.nrc.cadc.ac.UserNotFoundException;
+import ca.nrc.cadc.ac.server.GroupPersistence;
+import ca.nrc.cadc.ac.server.PluginFactory;
+import ca.nrc.cadc.ac.server.UserPersistence;
+import ca.nrc.cadc.net.TransientException;
+
 public abstract class GroupsAction
     implements PrivilegedExceptionAction<Object>
 {
@@ -131,9 +133,9 @@ public abstract class GroupsAction
         catch (AccessControlException e)
         {
             log.debug(e);
-            String message = "Unauthorized";
+            String message = "Permission Denied";
             this.logInfo.setMessage(message);
-            sendError(401, message);
+            sendError(403, message);
         }
         catch (IllegalArgumentException e)
         {
diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java
index 9e86d6dc88459c71314d7e198a2b59324e43d230..dd62ed5cdb871629bb86aa975b1a24e7b583e492 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java
@@ -94,16 +94,6 @@ public class GroupsServlet extends HttpServlet
         try
         {
             log.info(logInfo.start());
-
-            // Note: For this servlet, one does not want the subject to be
-            // augmented with all user principals, only the one in which
-            // they used to connect to the service.  This is accomplished
-            // by ensuring that there is no authenticator implementation
-            // available in the classpath with the name:
-            //   ca.nrc.cadc.auth.AuthenticatorImpl.class
-            // See cadcUtil method ca.nrc.cadc.auth.AuthenticationUtil#getAuthenticator()
-            // for more information.
-            
             Subject subject = AuthenticationUtil.getSubject(request);
             logInfo.setSubject(subject);
             GroupsAction action = GroupsActionFactory.getGroupsAction(request, logInfo);