diff --git a/project/peoplelist.py b/project/peoplelist.py
index f2aff1a..f888208 100644
--- a/project/peoplelist.py
+++ b/project/peoplelist.py
@@ -1,7 +1,6 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """A class to display a paginated list of project members.
 
@@ -19,7 +18,6 @@
 import ezt
 
 from businesslogic import work_env
-from framework import flaskservlet
 from framework import framework_bizobj
 from framework import framework_constants
 from framework import framework_helpers
@@ -35,10 +33,10 @@
 
 
 class PeopleList(servlet.Servlet):
-  """People list page shows a paginatied list of project members."""
+  """People list page shows a paginated list of project members."""
 
   _PAGE_TEMPLATE = 'project/people-list-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PEOPLE
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PEOPLE
 
   def AssertBasePermission(self, mr):
     super(PeopleList, self).AssertBasePermission(mr)
@@ -93,8 +91,8 @@
         mr.GetPositiveIntParam('start'), mr.project_name, urls.PEOPLE_LIST,
         url_params=url_params)
 
-    offer_membership_editing = mr.perms.HasPerm(
-        permissions.EDIT_PROJECT, mr.auth.user_id, mr.project)
+    offer_membership_editing = permissions.CanEditProjectConfig(
+        mr, self.services)
 
     check_abandonment = permissions.ShouldCheckForAbandonment(mr)
 
@@ -154,8 +152,7 @@
 
   def ProcessFormData(self, mr, post_data):
     """Process the posted form."""
-    permit_edit = mr.perms.HasPerm(
-        permissions.EDIT_PROJECT, mr.auth.user_id, mr.project)
+    permit_edit = permissions.CanEditProjectConfig(mr, self.services)
     if not permit_edit:
       raise permissions.PermissionException(
           'User is not permitted to edit project membership')
@@ -217,9 +214,7 @@
       String URL to redirect the user to after processing.
     """
     # 1. Parse and validate user input.
-    remove_strs = post_data.getall('remove')
-    # TODO(crbug.com/monorail/10936): getall in Flask is getlist
-    # remove_strs = post_data.getlist('remove')
+    remove_strs = post_data.getlist('remove')
     logging.info('remove_strs = %r', remove_strs)
     remove_ids = set(
         self.services.user.LookupUserIDs(mr.cnxn, remove_strs).values())
@@ -236,8 +231,8 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, urls.PEOPLE_LIST, saved=1, ts=int(time.time()))
 
-  # def GetPeopleListPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetPeopleListPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostPeopleListPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostPeopleListPage(self, **kwargs):
+    return self.handler(**kwargs)
