diff --git a/client/fasClient b/client/fasClient
index d5f0bac..82c8e77 100755
--- a/client/fasClient
+++ b/client/fasClient
@@ -385,7 +385,8 @@ class MakeShellAccounts(BaseClient):
 
     def people_list(self, search='*'):
         params = {'search' : search}
-        self.people = self.send_request('user/list', auth=True, input=params)['people']
+        data = self.send_request('user/list', auth=True, input=params)
+        self.people = data['people'] + data['unapproved_people']
 
     def email_list(self, search='*'):
         params = {'search' : search}
diff --git a/fas.cfg b/fas.cfg
index 3706246..934c2b7 100644
--- a/fas.cfg
+++ b/fas.cfg
@@ -59,7 +59,7 @@ mail.encoding = 'utf-8'
 
 # If you have sqlite, here's a simple default to get you started
 # in development
-sqlalchemy.dburi="postgres://fedora:test@localhost/fas2"
+sqlalchemy.dburi="postgres://fedora:bunbunbun@localhost/fas2"
 #sqlalchemy.echo=True
 
 # if you are using a database or table type without transactions
diff --git a/fas/templates/user/list.html b/fas/templates/user/list.html
index d2679b7..0f49b0e 100644
--- a/fas/templates/user/list.html
+++ b/fas/templates/user/list.html
@@ -7,7 +7,6 @@
     <title>${_('Users List')}</title>
   </head>
   <body>
-    <?python from fas import auth ?>
     <h2>${_('List (%s)') % search}</h2>
     <form method="get" action="${tg.url('/user/list')}">
       <p>${_('"*" is a wildcard (Ex: "ric*")')}</p>
@@ -32,11 +31,13 @@
         <tr py:for="person in people">
           <td><a href="${tg.url('/user/view/%s' % person.username)}">${person.username}</a></td>
           <td>
-            <?python
-            cla = auth.CLADone(person)
-            ?>
-            <span py:if="cla" class="approved">${_('CLA Done')}</span>
-            <span py:if="not cla" class="unapproved">${_('Not Done')}</span>
+            <span class="approved">${_('CLA Done')}</span>
+          </td>
+        </tr>
+        <tr py:for="person in unapproved_people">
+          <td><a href="${tg.url('/user/view/%s' % person.username)}">${person.username}</a></td>
+          <td>
+            <span class="unapproved">${_('Not Done')}</span>
           </td>
         </tr>
       </tbody>
diff --git a/fas/user.py b/fas/user.py
index a5bd965..7895464 100644
--- a/fas/user.py
+++ b/fas/user.py
@@ -37,7 +37,8 @@ import random
 import subprocess
 from OpenSSL import crypto
 
-from fas.model import People
+from sqlalchemy.sql import select, and_, not_
+from fas.model import People, PeopleTable, PersonRolesTable, GroupsTable
 from fas.model import Log
 
 from fas import openssl_fas
@@ -342,12 +343,52 @@ https://admin.fedoraproject.org/accounts/user/verifyemail/%s
     @expose(template="fas.templates.user.list", allow_json=True)
     def list(self, search=u'a*'):
         '''List users
+
+        This should be fixed up at some point.  Json data needs at least the
+        following for fasClient to work::
+
+          list of users with these attributes:
+            username
+            id
+            ssh_key
+            human_name
+            password
+
+        The template, on the other hand, needs to know about::
+
+          list of usernames with information about whether the user is
+          approved in cla_done
+       
+        The json information is useful so we probably want to create a new
+        method for it at some point.  One which returns the list of users with
+        more complete information about themselves.  Then this method can
+        change to only returning username and cla status.
         '''
         re_search = search.translate({ord(u'*'): ur'%'}).lower()
-        people = People.query.filter(People.username.like(re_search)).order_by('username')
-        if people.count() < 0:
+        PeopleGroupsTable = PeopleTable.join(
+                PersonRolesTable, PersonRoles.person_id==People.id).join(
+                        GroupsTable, PersonRoles.group_id==Groups.id)
+
+        approved = select([People.username, People.id, People.human_name,
+            People.ssh_key, People.password], from_obj=PeopleGroupsTable
+            ).where(and_(People.username.like(re_search),
+                    Groups.name=='cla_done',
+                    PersonRoles.role_status=='approved')
+                ).distinct().order_by('username').execute()
+        cla_approved = list(approved)
+
+        unapproved = select([People.username, People.id, People.human_name,
+            People.ssh_key, People.password]).where(and_(
+                People.username.like(re_search),
+                not_(People.id.in_([p['id'] for p in cla_approved])))
+                ).distinct().order_by('username').execute()
+        cla_unapproved = list(unapproved)
+
+        if not (cla_approved or cla_unapproved):
             turbogears.flash(_("No users found matching '%s'") % search)
-        return dict(people=people, search=search)
+
+        return dict(people=cla_approved, unapproved_people=cla_unapproved,
+                search=search)
 
     @identity.require(turbogears.identity.not_anonymous())
     @error_handler(error)
