diff --git a/project/peopledetail.py b/project/peopledetail.py
index af9cd49..b3b4bca 100644
--- a/project/peopledetail.py
+++ b/project/peopledetail.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 details about each project member."""
 from __future__ import print_function
@@ -14,7 +13,6 @@
 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
@@ -46,7 +44,7 @@
   """People detail page documents one partipant's involvement in a project."""
 
   _PAGE_TEMPLATE = 'project/people-detail-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PEOPLE
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PEOPLE
 
   def AssertBasePermission(self, mr):
     """Check that the user is allowed to access this servlet."""
@@ -233,9 +231,7 @@
 
     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'):
+    for ep in post_data.getlist('extra_perms'):
       perm = framework_bizobj.CanonicalizeLabel(ep)
       # Perms with leading underscores are reserved.
       perm = perm.strip('_')
@@ -271,8 +267,8 @@
     self.services.project.UpdateProjectRoles(
         cnxn, project.project_id, owner_ids, committer_ids, contributor_ids)
 
-  # def GetPeopleDetailPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetPeopleDetailPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostPeopleDetailPage(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 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)
diff --git a/project/project_constants.py b/project/project_constants.py
index f483b1f..4be3348 100644
--- a/project/project_constants.py
+++ b/project/project_constants.py
@@ -1,7 +1,6 @@
-# Copyright 2020 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 2020 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """Some constants used for managing Monorail Projects."""
 from __future__ import print_function
diff --git a/project/project_helpers.py b/project/project_helpers.py
index 23a2d46..3d02a2b 100644
--- a/project/project_helpers.py
+++ b/project/project_helpers.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.
 
 """Helper functions and classes used by the project pages."""
 from __future__ import print_function
@@ -20,7 +19,7 @@
 from framework import permissions
 from project import project_constants
 from project import project_views
-from proto import project_pb2
+from mrproto import project_pb2
 
 
 _RE_EMAIL_SEPARATORS = re.compile(r'\s|,|;')
@@ -231,6 +230,6 @@
 
 
 def AllProjectMembers(project):
-  # type: (proto.project_pb2.Project) -> Sequence[int]
+  # type: (mrproto.project_pb2.Project) -> Sequence[int]
   """Return a list of user IDs of all members in the given project."""
   return project.owner_ids + project.committer_ids + project.contributor_ids
diff --git a/project/project_views.py b/project/project_views.py
index e8698eb..eefea59 100644
--- a/project/project_views.py
+++ b/project/project_views.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.
 
 """View objects to help display projects in EZT."""
 from __future__ import print_function
@@ -19,7 +18,7 @@
 from framework import template_helpers
 from framework import timestr
 from framework import urls
-from proto import project_pb2
+from mrproto import project_pb2
 
 
 class ProjectAccessView(object):
diff --git a/project/projectadmin.py b/project/projectadmin.py
index a6e0d3e..042b198 100644
--- a/project/projectadmin.py
+++ b/project/projectadmin.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.
 
 """Servlets for project administration main subtab."""
 from __future__ import print_function
@@ -16,7 +15,6 @@
 
 from businesslogic import work_env
 from framework import emailfmt
-from framework import flaskservlet
 from framework import framework_helpers
 from framework import gcs_helpers
 from framework import permissions
@@ -37,7 +35,7 @@
   """A page with project configuration options for the Project Owner(s)."""
 
   _PAGE_TEMPLATE = 'project/project-admin-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     super(ProjectAdmin, self).AssertBasePermission(mr)
@@ -122,14 +120,14 @@
 
     logo_gcs_id = ''
     logo_file_name = ''
-    if 'logo' in post_data and not isinstance(post_data['logo'], string_types):
+    if 'logo' in post_data and post_data['logo'].filename != '':
       item = post_data['logo']
       logo_file_name = item.filename
       try:
         logo_gcs_id = gcs_helpers.StoreLogoInGCS(
-            logo_file_name, item.value, mr.project.project_id)
-      except gcs_helpers.UnsupportedMimeType, e:
-        mr.errors.logo = e.message
+            logo_file_name, item.read(), mr.project.project_id)
+      except gcs_helpers.UnsupportedMimeType as e:
+        mr.errors.logo = str(e)
     elif mr.project.logo_gcs_id and mr.project.logo_file_name:
       logo_gcs_id = mr.project.logo_gcs_id
       logo_file_name = mr.project.logo_file_name
@@ -189,8 +187,8 @@
 
     return summary, description
 
-  # def GetProjectAdminPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetProjectAdminPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostProjectAdminPage(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 eafe912..dff718a 100644
--- a/project/projectadminadvanced.py
+++ b/project/projectadminadvanced.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.
 
 """Page and form handlers for project administration "advanced" subtab.
 
@@ -22,14 +21,13 @@
 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
 from framework import servlet
 from framework import template_helpers
 from framework import urls
-from proto import project_pb2
+from mrproto import project_pb2
 from tracker import tracker_constants
 
 
@@ -37,7 +35,7 @@
   """A page with project state options for the Project Owner(s)."""
 
   _PAGE_TEMPLATE = 'project/project-admin-advanced-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     """Make sure that the logged in user has permission to view this page.
@@ -212,8 +210,8 @@
         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 GetProjectAdminAdvancedPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostProjectAdminAdvancedPage(self, **kwargs):
-  #   return self.handler(**kwargs)
\ No newline at end of file
+  def PostProjectAdminAdvancedPage(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/project/projectexport.py b/project/projectexport.py
index 177eea4..cc9353c 100644
--- a/project/projectexport.py
+++ b/project/projectexport.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.
 
 """Servlet to export a project's config in JSON format.
 """
@@ -9,24 +8,19 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import logging
 import time
 
-import ezt
-
-from framework import flaskservlet
 from framework import permissions
 from framework import jsonfeed
 from framework import servlet
 from project import project_helpers
-from tracker import tracker_bizobj
 
 
 class ProjectExport(servlet.Servlet):
   """Only site admins can export a project"""
 
   _PAGE_TEMPLATE = 'project/project-export-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_ADMIN
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_ADMIN
 
   def AssertBasePermission(self, mr):
     """Make sure that the logged in user has permission to view this page."""
@@ -43,11 +37,10 @@
         'page_perms': self.MakePagePerms(mr, None, permissions.CREATE_ISSUE),
     }
 
-  # def GetProjectExportPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  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."""
 
@@ -207,8 +200,8 @@
     }
     return component_json
 
-  # def GetProjectExportJSONPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetProjectExportJSONPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostProjectExportJSONPage(self, **kwargs):
-  #   return self.handler(**kwargs)
\ No newline at end of file
+  def PostProjectExportJSONPage(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/project/projectsummary.py b/project/projectsummary.py
index c0cad5a..316e1d5 100644
--- a/project/projectsummary.py
+++ b/project/projectsummary.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 the project summary page."""
 from __future__ import print_function
@@ -9,7 +8,6 @@
 from __future__ import absolute_import
 
 from businesslogic import work_env
-from framework import flaskservlet
 from framework import permissions
 from framework import servlet
 from project import project_helpers
@@ -20,7 +18,7 @@
   """Page to show brief project description and process documentation."""
 
   _PAGE_TEMPLATE = 'project/project-summary-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PROCESS
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PROCESS
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page."""
@@ -70,5 +68,5 @@
 
     return help_data
 
-  # def GetProjectSummaryPage(self, **kwargs):
-  #   return self.handler(**kwargs)
\ No newline at end of file
+  def GetProjectSummaryPage(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/project/projectupdates.py b/project/projectupdates.py
index 304b435..7a0928a 100644
--- a/project/projectupdates.py
+++ b/project/projectupdates.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 activity stream updates."""
 from __future__ import print_function
@@ -10,10 +9,7 @@
 
 import logging
 
-import ezt
-
 from features import activities
-from framework import flaskservlet
 from framework import servlet
 from framework import urls
 
@@ -22,7 +18,7 @@
   """ProjectUpdates page shows a list of past activities."""
 
   _PAGE_TEMPLATE = 'project/project-updates-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_UPDATES
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_UPDATES
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page."""
@@ -42,5 +38,5 @@
         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
+  def GetProjectUpdatesPage(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/project/redirects.py b/project/redirects.py
index 8c8b818..b49182a 100644
--- a/project/redirects.py
+++ b/project/redirects.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 forward requests to configured urls.
 
@@ -15,7 +14,6 @@
 
 from six.moves import http_client
 
-from framework import flaskservlet
 from framework import framework_helpers
 from framework import servlet
 from framework import urls
@@ -24,47 +22,39 @@
 class WikiRedirect(servlet.Servlet):
   """Redirect to the wiki documentation, if provided."""
 
-  def get(self, **kwargs):
+  def get(self):
     """Construct a 302 pointing at project.docs_url, or at adminIntro."""
     if not self.mr.project:
-      # 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
+      self.response.status_code = 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
-    # 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
+    self.response.status_code = http_client.MOVED_PERMANENTLY
 
-  # def GetWikiListRedirect(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetWikiListRedirect(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def GetWikiRedirect(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetWikiRedirect(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class SourceRedirect(servlet.Servlet):
   """Redirect to the source browser, if provided."""
 
-  def get(self, **kwargs):
+  def get(self):
     """Construct a 302 pointing at project.source_url, or at adminIntro."""
     if not self.mr.project:
-      # 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
+      self.response.status_code = 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
-    # 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
+    self.response.status_code = http_client.MOVED_PERMANENTLY
 
-  # def GetSourceRedirect(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetSourceRedirect(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/project/test/peopledetail_test.py b/project/test/peopledetail_test.py
index 547df80..792ffb2 100644
--- a/project/test/peopledetail_test.py
+++ b/project/test/peopledetail_test.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.
 
 """Unittest for the people detail page."""
 from __future__ import print_function
@@ -12,13 +11,11 @@
 
 import unittest
 
-import webapp2
-
 from framework import authdata
 from framework import exceptions
 from framework import permissions
 from project import peopledetail
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from testing import fake
 from testing import testing_helpers
@@ -39,7 +36,7 @@
     self.project.owner_ids.extend([111, 222])
     self.project.committer_ids.extend([333, 444])
     self.project.contributor_ids.extend([555])
-    self.servlet = peopledetail.PeopleDetail('req', 'res', services=services)
+    self.servlet = peopledetail.PeopleDetail(services=services)
 
   def VerifyAccess(self, exception_expected):
     mr = testing_helpers.MakeMonorailRequest(
@@ -127,12 +124,12 @@
         333, self.servlet.ValidateMemberID('fake cnxn', 333, self.project))
 
     # 404 for user that does not exist
-    with self.assertRaises(webapp2.HTTPException) as cm:
+    with self.assertRaises(Exception) as cm:
       self.servlet.ValidateMemberID('fake cnxn', 8933, self.project)
     self.assertEqual(404, cm.exception.code)
 
     # 404 for valid user that is not in this project
-    with self.assertRaises(webapp2.HTTPException) as cm:
+    with self.assertRaises(Exception) as cm:
       self.servlet.ValidateMemberID('fake cnxn', 999, self.project)
     self.assertEqual(404, cm.exception.code)
 
diff --git a/project/test/peoplelist_test.py b/project/test/peoplelist_test.py
index 6620df9..5459763 100644
--- a/project/test/peoplelist_test.py
+++ b/project/test/peoplelist_test.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.
 
 """Unittest for People List servlet."""
 from __future__ import print_function
@@ -13,7 +12,7 @@
 from framework import authdata
 from framework import permissions
 from project import peoplelist
-from proto import user_pb2
+from mrproto import user_pb2
 from services import service_manager
 from testing import fake
 from testing import testing_helpers
@@ -35,7 +34,7 @@
     self.project.owner_ids.extend([111])
     self.project.committer_ids.extend([222])
     self.project.contributor_ids.extend([333])
-    self.servlet = peoplelist.PeopleList('req', 'res', services=services)
+    self.servlet = peoplelist.PeopleList(services=services)
 
   def VerifyAccess(self, exception_expected):
     mr = testing_helpers.MakeMonorailRequest(
diff --git a/project/test/project_helpers_test.py b/project/test/project_helpers_test.py
index 4732895..5252c77 100644
--- a/project/test/project_helpers_test.py
+++ b/project/test/project_helpers_test.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.
 
 """Unit tests for helpers module."""
 from __future__ import print_function
@@ -16,7 +15,7 @@
 from framework import permissions
 from project import project_constants
 from project import project_helpers
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from testing import fake
 
diff --git a/project/test/project_views_test.py b/project/test/project_views_test.py
index 940116e..a6b0ce5 100644
--- a/project/test/project_views_test.py
+++ b/project/test/project_views_test.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.
 
 """Unit tests for project_views module."""
 from __future__ import print_function
@@ -12,7 +11,7 @@
 
 from framework import framework_views
 from project import project_views
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from testing import fake
 
diff --git a/project/test/projectadmin_test.py b/project/test/projectadmin_test.py
index 0257cd0..0b2dc82 100644
--- a/project/test/projectadmin_test.py
+++ b/project/test/projectadmin_test.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.
 
 """Unit tests for projectadmin module."""
 from __future__ import print_function
@@ -12,7 +11,7 @@
 
 from framework import permissions
 from project import projectadmin
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from testing import fake
 from testing import testing_helpers
@@ -25,7 +24,7 @@
     services = service_manager.Services(
         project=fake.ProjectService(),
         user=fake.UserService())
-    self.servlet = projectadmin.ProjectAdmin('req', 'res', services=services)
+    self.servlet = projectadmin.ProjectAdmin(services=services)
     self.project = services.project.TestAddProject(
         'proj', summary='a summary', description='a description')
     self.request, self.mr = testing_helpers.GetRequestObjects(
diff --git a/project/test/projectadminadvanced_test.py b/project/test/projectadminadvanced_test.py
index a654d98..bf1c5f1 100644
--- a/project/test/projectadminadvanced_test.py
+++ b/project/test/projectadminadvanced_test.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.
 
 """Unit tests for projectadminadvanced module."""
 from __future__ import print_function
@@ -14,7 +13,7 @@
 
 from framework import permissions
 from project import projectadminadvanced
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from testing import fake
 from testing import testing_helpers
@@ -28,8 +27,7 @@
   def setUp(self):
     services = service_manager.Services(
         project=fake.ProjectService())
-    self.servlet = projectadminadvanced.ProjectAdminAdvanced(
-        'req', 'res', services=services)
+    self.servlet = projectadminadvanced.ProjectAdminAdvanced(services=services)
     self.project = services.project.TestAddProject('proj', owner_ids=[111])
     self.mr = testing_helpers.MakeMonorailRequest(
         project=self.project,
diff --git a/project/test/projectexport_test.py b/project/test/projectexport_test.py
index 6dbe990..d575f2a 100644
--- a/project/test/projectexport_test.py
+++ b/project/test/projectexport_test.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.
 
 """Unittests for the projectexport servlet."""
 from __future__ import print_function
@@ -14,7 +13,7 @@
 
 from framework import permissions
 from project import projectexport
-from proto import tracker_pb2
+from mrproto import tracker_pb2
 from services import service_manager
 from services.template_svc import TemplateService
 from testing import fake
@@ -25,8 +24,7 @@
 
   def setUp(self):
     self.services = service_manager.Services()
-    self.servlet = projectexport.ProjectExport(
-        'req', 'res', services=self.services)
+    self.servlet = projectexport.ProjectExport(services=self.services)
 
   def testAssertBasePermission(self):
     mr = testing_helpers.MakeMonorailRequest(
@@ -46,8 +44,7 @@
         user=fake.UserService(),
         template=Mock(spec=TemplateService))
     self.services.user.TestAddUser('user1@example.com', 111)
-    self.servlet = projectexport.ProjectExportJSON(
-        'req', 'res', services=self.services)
+    self.servlet = projectexport.ProjectExportJSON(services=self.services)
     self.project = fake.Project(project_id=789)
     self.mr = testing_helpers.MakeMonorailRequest(
         perms=permissions.OWNER_ACTIVE_PERMISSIONSET)
diff --git a/project/test/projectsummary_test.py b/project/test/projectsummary_test.py
index 32b2fde..6f6373b 100644
--- a/project/test/projectsummary_test.py
+++ b/project/test/projectsummary_test.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.
 
 """Unittests for Project Summary servlet."""
 from __future__ import print_function
@@ -12,8 +11,8 @@
 
 from framework import permissions
 from project import projectsummary
-from proto import project_pb2
-from proto import user_pb2
+from mrproto import project_pb2
+from mrproto import user_pb2
 from services import service_manager
 from testing import fake
 from testing import testing_helpers
@@ -30,8 +29,7 @@
     self.project = services.project.TestAddProject(
         'proj', project_id=123, summary='sum',
         description='desc')
-    self.servlet = projectsummary.ProjectSummary(
-        'req', 'res', services=services)
+    self.servlet = projectsummary.ProjectSummary(services=services)
 
   def testGatherPageData(self):
     mr = testing_helpers.MakeMonorailRequest(project=self.project)
diff --git a/project/test/projectupdates_test.py b/project/test/projectupdates_test.py
index e4c5cea..56cadce 100644
--- a/project/test/projectupdates_test.py
+++ b/project/test/projectupdates_test.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.
 
 """Unittests for monorail.project.projectupdates."""
 from __future__ import print_function
@@ -36,8 +35,7 @@
     self.mr = testing_helpers.MakeMonorailRequest(
         services=self.services, project=self.project)
     self.mr.project_name = self.project_name
-    self.project_updates = projectupdates.ProjectUpdates(
-        None, None, self.services)
+    self.project_updates = projectupdates.ProjectUpdates(self.services)
     self.mox = mox.Mox()
 
   def tearDown(self):
diff --git a/project/test/redirects_test.py b/project/test/redirects_test.py
index 0091571..1f71435 100644
--- a/project/test/redirects_test.py
+++ b/project/test/redirects_test.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.
 
 """Tests for project handlers that redirect."""
 from __future__ import print_function
@@ -11,7 +10,7 @@
 from six.moves import http_client
 import unittest
 
-import webapp2
+import flask
 
 from framework import urls
 from project import redirects
@@ -24,9 +23,8 @@
 
   def setUp(self):
     self.services = service_manager.Services()
-    self.servlet = redirects.WikiRedirect(
-        webapp2.Request.blank('url'), webapp2.Response(),
-        services=self.services)
+    self.servlet = redirects.WikiRedirect(services=self.services)
+    self.servlet.response = flask.Response()
     self.project = fake.Project()
     self.servlet.mr = testing_helpers.MakeMonorailRequest(
         project=self.project)
@@ -58,9 +56,8 @@
 
   def setUp(self):
     self.services = service_manager.Services()
-    self.servlet = redirects.SourceRedirect(
-        webapp2.Request.blank('url'), webapp2.Response(),
-        services=self.services)
+    self.servlet = redirects.SourceRedirect(services=self.services)
+    self.servlet.response = flask.Response()
     self.project = fake.Project()
     self.servlet.mr = testing_helpers.MakeMonorailRequest(
         project=self.project)
