diff --git a/project/peopledetail.py b/project/peopledetail.py
index 3c4846b..af9cd49 100644
--- a/project/peopledetail.py
+++ b/project/peopledetail.py
@@ -14,10 +14,10 @@
 import ezt
 
 from framework import exceptions
+from framework import flaskservlet
 from framework import framework_bizobj
 from framework import framework_helpers
 from framework import framework_views
-from framework import jsonfeed
 from framework import permissions
 from framework import servlet
 from framework import template_helpers
@@ -39,7 +39,6 @@
     permissions.DELETE_OWN,
     permissions.DELETE_ANY,
     permissions.EDIT_ANY_MEMBER_NOTES,
-    permissions.MODERATE_SPAM,
     ]
 
 
@@ -47,7 +46,7 @@
   """People detail page documents one partipant's involvement in a project."""
 
   _PAGE_TEMPLATE = 'project/people-detail-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PEOPLE
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PEOPLE
 
   def AssertBasePermission(self, mr):
     """Check that the user is allowed to access this servlet."""
@@ -234,6 +233,8 @@
 
     role = post_data.get('role', '').lower()
     extra_perms = []
+    # TODO(crbug.com/monorail/10936): getall in Flask is getlist
+    # for ep in post_data.getlist('extra_perms'):
     for ep in post_data.getall('extra_perms'):
       perm = framework_bizobj.CanonicalizeLabel(ep)
       # Perms with leading underscores are reserved.
@@ -269,3 +270,9 @@
 
     self.services.project.UpdateProjectRoles(
         cnxn, project.project_id, owner_ids, committer_ids, contributor_ids)
+
+  # def GetPeopleDetailPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostPeopleDetailPage(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/project/peoplelist.py b/project/peoplelist.py
index 0db5ee6..f2aff1a 100644
--- a/project/peoplelist.py
+++ b/project/peoplelist.py
@@ -19,6 +19,7 @@
 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
@@ -37,7 +38,7 @@
   """People list page shows a paginatied list of project members."""
 
   _PAGE_TEMPLATE = 'project/people-list-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PEOPLE
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PEOPLE
 
   def AssertBasePermission(self, mr):
     super(PeopleList, self).AssertBasePermission(mr)
@@ -217,6 +218,8 @@
     """
     # 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')
     logging.info('remove_strs = %r', remove_strs)
     remove_ids = set(
         self.services.user.LookupUserIDs(mr.cnxn, remove_strs).values())
@@ -232,3 +235,9 @@
     # 3. Determine the next page in the UI flow.
     return framework_helpers.FormatAbsoluteURL(
         mr, urls.PEOPLE_LIST, saved=1, ts=int(time.time()))
+
+  # def GetPeopleListPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostPeopleListPage(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/project/projectadmin.py b/project/projectadmin.py
index 887d3fc..a6e0d3e 100644
--- a/project/projectadmin.py
+++ b/project/projectadmin.py
@@ -8,17 +8,15 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import logging
 import time
 
+from google.cloud import exceptions
 from six import string_types
-from third_party import cloudstorage
 import ezt
 
 from businesslogic import work_env
 from framework import emailfmt
-from framework import framework_bizobj
-from framework import framework_constants
+from framework import flaskservlet
 from framework import framework_helpers
 from framework import gcs_helpers
 from framework import permissions
@@ -39,7 +37,7 @@
   """A page with project configuration options for the Project Owner(s)."""
 
   _PAGE_TEMPLATE = 'project/project-admin-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     super(ProjectAdmin, self).AssertBasePermission(mr)
@@ -138,7 +136,7 @@
       if post_data.get('delete_logo'):
         try:
           gcs_helpers.DeleteObjectFromGCS(logo_gcs_id)
-        except cloudstorage.NotFoundError:
+        except exceptions.NotFound:
           pass
         # Reset the GCS ID and file name.
         logo_gcs_id = ''
@@ -190,3 +188,9 @@
         errors.description = _MSG_DESCRIPTION_MISSING
 
     return summary, description
+
+  # def GetProjectAdminPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostProjectAdminPage(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/project/projectadminadvanced.py b/project/projectadminadvanced.py
index 9c5fc1b..eafe912 100644
--- a/project/projectadminadvanced.py
+++ b/project/projectadminadvanced.py
@@ -17,12 +17,12 @@
 from __future__ import print_function
 from __future__ import absolute_import
 
-import logging
 import time
 
 import ezt
 
 from businesslogic import work_env
+from framework import flaskservlet
 from framework import framework_constants
 from framework import framework_helpers
 from framework import permissions
@@ -37,7 +37,7 @@
   """A page with project state options for the Project Owner(s)."""
 
   _PAGE_TEMPLATE = 'project/project-admin-advanced-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     """Make sure that the logged in user has permission to view this page.
@@ -211,3 +211,9 @@
               'This project is not live, no user can move it')
         moved_to = post_data.get('moved_to', '')
         we.UpdateProject(mr.project.project_id, moved_to=moved_to)
+
+  # def GetProjectAdminAdvancedPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostProjectAdminAdvancedPage(self, **kwargs):
+  #   return self.handler(**kwargs)
\ No newline at end of file
diff --git a/project/projectexport.py b/project/projectexport.py
index e315442..177eea4 100644
--- a/project/projectexport.py
+++ b/project/projectexport.py
@@ -14,6 +14,7 @@
 
 import ezt
 
+from framework import flaskservlet
 from framework import permissions
 from framework import jsonfeed
 from framework import servlet
@@ -25,7 +26,7 @@
   """Only site admins can export a project"""
 
   _PAGE_TEMPLATE = 'project/project-export-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     """Make sure that the logged in user has permission to view this page."""
@@ -42,7 +43,11 @@
         'page_perms': self.MakePagePerms(mr, None, permissions.CREATE_ISSUE),
     }
 
+  # def GetProjectExportPage(self, **kwargs):
+  #   return self.handler(**kwargs)
 
+
+# TODO(https://crbug.com/monorail/10936): Use FlaskJsonFeed
 class ProjectExportJSON(jsonfeed.JsonFeed):
   """ProjectExportJSON shows all configuration for a Project in JSON form."""
 
@@ -201,3 +206,9 @@
       'ccs': [email_dict.get(user) for user in component.cc_ids],
     }
     return component_json
+
+  # def GetProjectExportJSONPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostProjectExportJSONPage(self, **kwargs):
+  #   return self.handler(**kwargs)
\ No newline at end of file
diff --git a/project/projectsummary.py b/project/projectsummary.py
index 018aaf3..c0cad5a 100644
--- a/project/projectsummary.py
+++ b/project/projectsummary.py
@@ -8,9 +8,8 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import logging
-
 from businesslogic import work_env
+from framework import flaskservlet
 from framework import permissions
 from framework import servlet
 from project import project_helpers
@@ -21,7 +20,7 @@
   """Page to show brief project description and process documentation."""
 
   _PAGE_TEMPLATE = 'project/project-summary-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PROCESS
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PROCESS
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page."""
@@ -70,3 +69,6 @@
         help_data['cue'] = 'document_team_duties'
 
     return help_data
+
+  # def GetProjectSummaryPage(self, **kwargs):
+  #   return self.handler(**kwargs)
\ No newline at end of file
diff --git a/project/projectupdates.py b/project/projectupdates.py
index bd1e316..304b435 100644
--- a/project/projectupdates.py
+++ b/project/projectupdates.py
@@ -13,6 +13,7 @@
 import ezt
 
 from features import activities
+from framework import flaskservlet
 from framework import servlet
 from framework import urls
 
@@ -21,7 +22,7 @@
   """ProjectUpdates page shows a list of past activities."""
 
   _PAGE_TEMPLATE = 'project/project-updates-page.ezt'
-  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_UPDATES
+  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_UPDATES
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page."""
@@ -40,3 +41,6 @@
         self.services, mr, project_ids=[mr.project_id],
         ending='by_user', updates_page_url=url,
         autolink=self.services.autolink)
+
+  # def GetProjectUpdatesPage(self, **kwargs):
+  #   return self.handler(**kwargs)
\ No newline at end of file
diff --git a/project/redirects.py b/project/redirects.py
index 7813a56..8c8b818 100644
--- a/project/redirects.py
+++ b/project/redirects.py
@@ -13,8 +13,9 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import httplib
+from six.moves import http_client
 
+from framework import flaskservlet
 from framework import framework_helpers
 from framework import servlet
 from framework import urls
@@ -26,14 +27,24 @@
   def get(self, **kwargs):
     """Construct a 302 pointing at project.docs_url, or at adminIntro."""
     if not self.mr.project:
-      self.response.status = httplib.NOT_FOUND
+      # TODO(crbug.com/monorail/10936): status in Flask is status_code
+      # self.response.status_code = http_client.NOT_FOUND
+      self.response.status = http_client.NOT_FOUND
       return
     docs_url = self.mr.project.docs_url
     if not docs_url:
       docs_url = framework_helpers.FormatAbsoluteURL(
           self.mr, urls.ADMIN_INTRO, include_project=True)
     self.response.location = docs_url
-    self.response.status = httplib.MOVED_PERMANENTLY
+    # TODO(crbug.com/monorail/10936): status in Flask is status_code
+    # self.response.status_code = http_client.MOVED_PERMANENTLY
+    self.response.status = http_client.MOVED_PERMANENTLY
+
+  # def GetWikiListRedirect(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def GetWikiRedirect(self, **kwargs):
+  #   return self.handler(**kwargs)
 
 
 class SourceRedirect(servlet.Servlet):
@@ -42,11 +53,18 @@
   def get(self, **kwargs):
     """Construct a 302 pointing at project.source_url, or at adminIntro."""
     if not self.mr.project:
-      self.response.status = httplib.NOT_FOUND
+      # TODO(crbug.com/monorail/10936): status in Flask is status_code
+      # self.response.status_code = http_client.NOT_FOUND
+      self.response.status = http_client.NOT_FOUND
       return
     source_url = self.mr.project.source_url
     if not source_url:
       source_url = framework_helpers.FormatAbsoluteURL(
           self.mr, urls.ADMIN_INTRO, include_project=True)
     self.response.location = source_url
-    self.response.status = httplib.MOVED_PERMANENTLY
+    # TODO(crbug.com/monorail/10936): status in Flask is status_code
+    # self.response.status_code = http_client.MOVED_PERMANENTLY
+    self.response.status = http_client.MOVED_PERMANENTLY
+
+  # def GetSourceRedirect(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/project/test/redirects_test.py b/project/test/redirects_test.py
index 2f51495..0091571 100644
--- a/project/test/redirects_test.py
+++ b/project/test/redirects_test.py
@@ -8,7 +8,7 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import httplib
+from six.moves import http_client
 import unittest
 
 import webapp2
@@ -35,14 +35,13 @@
     """Visiting a project that we don't host is 404."""
     self.servlet.mr.project = None
     self.servlet.get()
-    self.assertEqual(
-        httplib.NOT_FOUND, self.servlet.response.status_code)
+    self.assertEqual(http_client.NOT_FOUND, self.servlet.response.status_code)
 
   def testRedirect_NoDocsSpecified(self):
     """Visiting any old wiki URL goes to admin intro by default."""
     self.servlet.get()
     self.assertEqual(
-        httplib.MOVED_PERMANENTLY, self.servlet.response.status_code)
+        http_client.MOVED_PERMANENTLY, self.servlet.response.status_code)
     self.assertTrue(
         self.servlet.response.location.endswith(urls.ADMIN_INTRO))
 
@@ -51,7 +50,7 @@
     self.project.docs_url = 'some_url'
     self.servlet.get()
     self.assertEqual(
-        httplib.MOVED_PERMANENTLY, self.servlet.response.status_code)
+        http_client.MOVED_PERMANENTLY, self.servlet.response.status_code)
     self.assertEqual('some_url', self.servlet.response.location)
 
 
@@ -70,14 +69,13 @@
     """Visiting a project that we don't host is 404."""
     self.servlet.mr.project = None
     self.servlet.get()
-    self.assertEqual(
-        httplib.NOT_FOUND, self.servlet.response.status_code)
+    self.assertEqual(http_client.NOT_FOUND, self.servlet.response.status_code)
 
   def testRedirect_NoSrcSpecified(self):
     """Visiting any old source code URL goes to admin intro by default."""
     self.servlet.get()
     self.assertEqual(
-        httplib.MOVED_PERMANENTLY, self.servlet.response.status_code)
+        http_client.MOVED_PERMANENTLY, self.servlet.response.status_code)
     self.assertTrue(
         self.servlet.response.location.endswith(urls.ADMIN_INTRO))
 
@@ -86,5 +84,5 @@
     self.project.source_url = 'some_url'
     self.servlet.get()
     self.assertEqual(
-        httplib.MOVED_PERMANENTLY, self.servlet.response.status_code)
+        http_client.MOVED_PERMANENTLY, self.servlet.response.status_code)
     self.assertEqual('some_url', self.servlet.response.location)
