diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
index 6a7ec0cfa244665a668eb5573b8a3ca023e146b9..d4b7a3b6395e465a01251d9370d6279f26aacac3 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java
@@ -185,7 +185,9 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
                                   group.getUserAdmins(), 
                                   group.getGroupAdmins());
                 LdapDAO.checkLdapResult(result.getResultCode());
-                
+                // AD: Search results sometimes come incomplete if
+                // connection is not reset - not sure why.
+                getConnection().reconnect();
                 try
                 {
                     return getGroup(group.getID());
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 d608fb82b1c65fbd214996b05eef78fc878b1fbd..1e064e621c21c284da9f8165b8bae63385e1c165 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
@@ -100,6 +100,9 @@ import ca.nrc.cadc.uws.server.JobRunner;
 import ca.nrc.cadc.uws.server.JobUpdater;
 import ca.nrc.cadc.uws.server.SyncOutput;
 import ca.nrc.cadc.uws.util.JobLogInfo;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
 
 public class ACSearchRunner implements JobRunner
 {
@@ -225,8 +228,15 @@ public class ACSearchRunner implements JobRunner
 
             PluginFactory factory = new PluginFactory();
             GroupPersistence dao = factory.getGroupPersistence();
-            Collection<Group> groups = 
-                dao.getGroups(rv.getPrincipal(), rv.getRole(), rv.getGroupID());
+            Collection<Group> groups;
+            try
+            {
+                groups = dao.getGroups(rv.getPrincipal(), rv.getRole(), rv.getGroupID());
+            }
+            catch(GroupNotFoundException ignore)
+            {
+                groups = new ArrayList<Group>();
+            }
             syncOut.setResponseCode(HttpServletResponse.SC_OK);
             GroupsWriter.write(groups, syncOut.getOutputStream());
             
@@ -241,7 +251,7 @@ public class ACSearchRunner implements JobRunner
             log.error("FAIL", t);
             
             syncOut.setResponseCode(503);
-            syncOut.setHeader("Content-Type", "text/plan");
+            syncOut.setHeader("Content-Type", "text/plain");
             try
             {
                 syncOut.getOutputStream().write(t.getMessage().getBytes());
@@ -266,12 +276,12 @@ public class ACSearchRunner implements JobRunner
         }
         catch (UserNotFoundException t)
         {
-            logInfo.setSuccess(false);
+            logInfo.setSuccess(true);
             logInfo.setMessage(t.getMessage());
             log.debug("FAIL", t);
             
             syncOut.setResponseCode(404);
-            syncOut.setHeader("Content-Type", "text/plan");
+            syncOut.setHeader("Content-Type", "text/plain");
             try
             {
                 syncOut.getOutputStream().write(t.getMessage().getBytes());
@@ -294,14 +304,15 @@ public class ACSearchRunner implements JobRunner
 //                log.debug("failed to set final error status after " + t, oops);
 //            }
         }
+        /*
         catch (GroupNotFoundException t)
         {
-            logInfo.setSuccess(false);
+            logInfo.setSuccess(true);
             logInfo.setMessage(t.getMessage());
             log.debug("FAIL", t);
             
             syncOut.setResponseCode(404);
-            syncOut.setHeader("Content-Type", "text/plan");
+            syncOut.setHeader("Content-Type", "text/plain");
             try
             {
                 syncOut.getOutputStream().write(t.getMessage().getBytes());
@@ -324,14 +335,15 @@ public class ACSearchRunner implements JobRunner
 //                log.debug("failed to set final error status after " + t, oops);
 //            }
         }
+        */
         catch (AccessControlException t)
         {
-            logInfo.setSuccess(false);
+            logInfo.setSuccess(true);
             logInfo.setMessage(t.getMessage());
             log.debug("FAIL", t);
             
             syncOut.setResponseCode(403);
-            syncOut.setHeader("Content-Type", "text/plan");
+            syncOut.setHeader("Content-Type", "text/plain");
             try
             {
                 syncOut.getOutputStream().write(t.getMessage().getBytes());
@@ -360,16 +372,7 @@ public class ACSearchRunner implements JobRunner
             logInfo.setMessage(t.getMessage());
             log.error("FAIL", t);
             
-            syncOut.setResponseCode(500);
-            syncOut.setHeader("Content-Type", "text/plan");
-            try
-            {
-                syncOut.getOutputStream().write(t.getMessage().getBytes());
-            }
-            catch (IOException e)
-            {
-                log.warn("Could not write response to output stream", e);
-            }
+            writeError(syncOut, 500, t);
             
 //            ErrorSummary errorSummary =
 //                new ErrorSummary(t.getMessage(), ErrorType.FATAL);
@@ -386,4 +389,23 @@ public class ACSearchRunner implements JobRunner
         }
     }
     
+    private void writeError(SyncOutput syncOutput, int code, Throwable t)
+    {
+        try
+        {
+            syncOutput.setResponseCode(code);
+            syncOut.setHeader("Content-Type", "text/plain");
+            OutputStream ostream = syncOut.getOutputStream();
+            if (ostream != null)
+            {
+                OutputStreamWriter w = new OutputStreamWriter(ostream);
+                w.write(t.toString());
+                w.flush();
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("Could not write response to output stream", e);
+        }
+    }
 }