diff --git a/sitewide/test/custom_404_test.py b/sitewide/test/custom_404_test.py
index b47501d..fe099d6 100644
--- a/sitewide/test/custom_404_test.py
+++ b/sitewide/test/custom_404_test.py
@@ -1,7 +1,6 @@
-# Copyright 2017 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 2017 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 the custom_404 servlet."""
 from __future__ import print_function
@@ -23,7 +22,7 @@
   def setUp(self):
     self.services = service_manager.Services(
         project=fake.ProjectService())
-    self.servlet = custom_404.ErrorPage('req', 'res', services=self.services)
+    self.servlet = custom_404.ErrorPage(services=self.services)
 
   def testGatherPageData_NoProjectSpecified(self):
     """Project was not included in URL, so raise exception, will cause 400."""
diff --git a/sitewide/test/group_helpers_test.py b/sitewide/test/group_helpers_test.py
index af03d08..02ecfbd 100644
--- a/sitewide/test/group_helpers_test.py
+++ b/sitewide/test/group_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 test for User Group helpers."""
 from __future__ import print_function
@@ -10,8 +9,8 @@
 
 import unittest
 
-from proto import user_pb2
-from proto import usergroup_pb2
+from mrproto import user_pb2
+from mrproto import usergroup_pb2
 from sitewide import group_helpers
 
 
diff --git a/sitewide/test/groupadmin_test.py b/sitewide/test/groupadmin_test.py
index 72dfa9d..1322a0f 100644
--- a/sitewide/test/groupadmin_test.py
+++ b/sitewide/test/groupadmin_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 test for User Group admin servlet."""
 from __future__ import print_function
@@ -11,7 +10,7 @@
 import unittest
 
 from framework import permissions
-from proto import usergroup_pb2
+from mrproto import usergroup_pb2
 from services import service_manager
 from sitewide import groupadmin
 from testing import fake
diff --git a/sitewide/test/groupcreate_test.py b/sitewide/test/groupcreate_test.py
index f82fb74..2944d11 100644
--- a/sitewide/test/groupcreate_test.py
+++ b/sitewide/test/groupcreate_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 test for User Group creation servlet."""
 from __future__ import print_function
@@ -12,8 +11,8 @@
 
 import settings
 from framework import permissions
-from proto import site_pb2
-from proto import usergroup_pb2
+from mrproto import site_pb2
+from mrproto import usergroup_pb2
 from services import service_manager
 from sitewide import groupcreate
 from testing import fake
diff --git a/sitewide/test/groupdetail_test.py b/sitewide/test/groupdetail_test.py
index f294606..dc341ee 100644
--- a/sitewide/test/groupdetail_test.py
+++ b/sitewide/test/groupdetail_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 test for User Group Detail servlet."""
 from __future__ import print_function
diff --git a/sitewide/test/grouplist_test.py b/sitewide/test/grouplist_test.py
index 9ec6bd5..9f838a5 100644
--- a/sitewide/test/grouplist_test.py
+++ b/sitewide/test/grouplist_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 test for User Group List servlet."""
 from __future__ import print_function
@@ -25,7 +24,7 @@
   def setUp(self):
     self.services = service_manager.Services(
         usergroup=fake.UserGroupService())
-    self.servlet = grouplist.GroupList('req', 'res', services=self.services)
+    self.servlet = grouplist.GroupList(services=self.services)
     self.mr = testing_helpers.MakeMonorailRequest()
     self.testbed = testbed.Testbed()
     self.testbed.activate()
diff --git a/sitewide/test/hostinghome_test.py b/sitewide/test/hostinghome_test.py
index de125a5..8a486f8 100644
--- a/sitewide/test/hostinghome_test.py
+++ b/sitewide/test/hostinghome_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 the Monorail home page."""
 from __future__ import print_function
@@ -15,8 +14,8 @@
 
 import settings
 from framework import permissions
-from proto import project_pb2
-from proto import site_pb2
+from mrproto import project_pb2
+from mrproto import site_pb2
 from services import service_manager
 from sitewide import hostinghome
 from sitewide import projectsearch
diff --git a/sitewide/test/moved_test.py b/sitewide/test/moved_test.py
index eccb195..2f4ee4f 100644
--- a/sitewide/test/moved_test.py
+++ b/sitewide/test/moved_test.py
@@ -1,17 +1,15 @@
-# 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 the moved project notification page servlet."""
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
+import six
 import unittest
 
-import webapp2
-
 from framework import exceptions
 from services import service_manager
 from sitewide import moved
@@ -62,9 +60,8 @@
         path='/hosting/moved?project=%s' % self.old_project)
 
     page_data = self.servlet.GatherPageData(mr)
-    self.assertItemsEqual(
-        ['project_name', 'moved_to_url'],
-        list(page_data.keys()))
+    six.assertCountEqual(
+        self, ['project_name', 'moved_to_url'], list(page_data.keys()))
     self.assertEqual(self.old_project, page_data['project_name'])
     self.assertEqual('https://other-tracker.bugs', page_data['moved_to_url'])
 
@@ -76,9 +73,8 @@
         path='/hosting/moved?project=%s' % self.old_project)
 
     page_data = self.servlet.GatherPageData(mr)
-    self.assertItemsEqual(
-        ['project_name', 'moved_to_url'],
-        list(page_data.keys()))
+    six.assertCountEqual(
+        self, ['project_name', 'moved_to_url'], list(page_data.keys()))
     self.assertEqual(self.old_project, page_data['project_name'])
     self.assertEqual('http://127.0.0.1/p/new-project/',
                      page_data['moved_to_url'])
@@ -91,9 +87,8 @@
         path='/hosting/moved?project=%s' % self.old_project)
 
     page_data = self.servlet.GatherPageData(mr)
-    self.assertItemsEqual(
-        ['project_name', 'moved_to_url'],
-        list(page_data.keys()))
+    six.assertCountEqual(
+        self, ['project_name', 'moved_to_url'], list(page_data.keys()))
     self.assertEqual(self.old_project, page_data['project_name'])
     self.assertEqual('http://127.0.0.1/p/http-project/',
                      page_data['moved_to_url'])
@@ -106,8 +101,7 @@
         path='/hosting/moved?project=%s' % self.old_project)
 
     page_data = self.servlet.GatherPageData(mr)
-    self.assertItemsEqual(
-        ['project_name', 'moved_to_url'],
-        list(page_data.keys()))
+    six.assertCountEqual(
+        self, ['project_name', 'moved_to_url'], list(page_data.keys()))
     self.assertEqual(self.old_project, page_data['project_name'])
     self.assertEqual('#invalid-destination-url', page_data['moved_to_url'])
diff --git a/sitewide/test/projectcreate_test.py b/sitewide/test/projectcreate_test.py
index 13dc97b..a79b9df 100644
--- a/sitewide/test/projectcreate_test.py
+++ b/sitewide/test/projectcreate_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 Project Creation servlet."""
 from __future__ import print_function
@@ -12,8 +11,8 @@
 
 import settings
 from framework import permissions
-from proto import project_pb2
-from proto import site_pb2
+from mrproto import project_pb2
+from mrproto import site_pb2
 from services import service_manager
 from sitewide import projectcreate
 from testing import fake
diff --git a/sitewide/test/projectsearch_test.py b/sitewide/test/projectsearch_test.py
index a0d941d..cd63e7f 100644
--- a/sitewide/test/projectsearch_test.py
+++ b/sitewide/test/projectsearch_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 projectsearch module."""
 from __future__ import print_function
@@ -12,7 +11,7 @@
 import unittest
 
 from framework import profiler
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from sitewide import projectsearch
 from testing import fake
@@ -24,14 +23,14 @@
   def setUp(self):
     self.services = service_manager.Services(
         project=fake.ProjectService())
-    self.services.project.GetVisibleLiveProjects = mock.MagicMock()
+    self.services.project.GetVisibleProjects = mock.MagicMock()
 
     for idx, letter in enumerate('abcdefghijklmnopqrstuvwxyz'):
       self.services.project.TestAddProject(letter, project_id=idx + 1)
     for idx in range(27, 110):
       self.services.project.TestAddProject(str(idx), project_id=idx)
 
-    self.addCleanup(mock.patch.stopall())
+    self.addCleanup(mock.patch.stopall)
 
   def TestPipeline(self, expected_last, expected_len):
     mr = testing_helpers.MakeMonorailRequest()
@@ -47,29 +46,28 @@
     return pipeline
 
   def testZeroResults(self):
-    self.services.project.GetVisibleLiveProjects.return_value = []
+    self.services.project.GetVisibleProjects.return_value = []
 
     pipeline = self.TestPipeline(0, 0)
 
-    self.services.project.GetVisibleLiveProjects.assert_called_once()
+    self.services.project.GetVisibleProjects.assert_called_once()
     self.assertListEqual([], pipeline.visible_results)
 
   def testNonzeroResults(self):
-    self.services.project.GetVisibleLiveProjects.return_value = [1, 2, 3]
+    self.services.project.GetVisibleProjects.return_value = [1, 2, 3]
 
     pipeline = self.TestPipeline(3, 3)
 
-    self.services.project.GetVisibleLiveProjects.assert_called_once()
+    self.services.project.GetVisibleProjects.assert_called_once()
     self.assertListEqual(
         [1, 2, 3], [p.project_id for p in pipeline.visible_results])
 
   def testTwoPageResults(self):
     """Test more than one pagination page of results."""
-    self.services.project.GetVisibleLiveProjects.return_value = list(
-        range(1, 106))
+    self.services.project.GetVisibleProjects.return_value = list(range(1, 106))
 
     pipeline = self.TestPipeline(100, 100)
 
-    self.services.project.GetVisibleLiveProjects.assert_called_once()
+    self.services.project.GetVisibleProjects.assert_called_once()
     self.assertEqual(
         '/hosting/search?num=100&start=100', pipeline.pagination.next_url)
diff --git a/sitewide/test/sitewide_helpers_test.py b/sitewide/test/sitewide_helpers_test.py
index d292b6f..03905d9 100644
--- a/sitewide/test/sitewide_helpers_test.py
+++ b/sitewide/test/sitewide_helpers_test.py
@@ -1,16 +1,16 @@
-# 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 the sitewide_helpers module."""
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
+import six
 import unittest
 
-from proto import project_pb2
+from mrproto import project_pb2
 from services import service_manager
 from sitewide import sitewide_helpers
 from testing import fake
@@ -93,7 +93,7 @@
     # Check names rather than Project objects so that output is easier to read.
     actual_names = [p.project_name for p in actual_projects]
     expected_names = [p.project_name for p in expected_projects]
-    self.assertItemsEqual(expected_names, actual_names)
+    six.assertCountEqual(self, expected_names, actual_names)
 
   def testFilterViewableProjects_CantViewArchived(self):
     projects = list(sitewide_helpers.FilterViewableProjects(
diff --git a/sitewide/test/sitewide_views_test.py b/sitewide/test/sitewide_views_test.py
index ed2515f..3622bdc 100644
--- a/sitewide/test/sitewide_views_test.py
+++ b/sitewide/test/sitewide_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 sitewide_views module."""
 from __future__ import print_function
@@ -10,7 +9,7 @@
 
 import unittest
 
-from proto import usergroup_pb2
+from mrproto import usergroup_pb2
 from sitewide import sitewide_views
 
 
diff --git a/sitewide/test/userprofile_test.py b/sitewide/test/userprofile_test.py
index b4e29d8..42c901e 100644
--- a/sitewide/test/userprofile_test.py
+++ b/sitewide/test/userprofile_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 the user profile page."""
 from __future__ import print_function
@@ -10,21 +9,18 @@
 
 import mock
 import unittest
-import logging
-import webapp2
 import ezt
+import six
 
-from framework import framework_helpers
+from google.appengine.ext import testbed
+import pytest
+
 from framework import framework_views
 from framework import permissions
-from proto import project_pb2
-from proto import user_pb2
+from mrproto import project_pb2
 from services import service_manager
 from sitewide import userprofile
 from testing import fake
-from testing import testing_helpers
-
-from google.appengine.ext import testbed
 
 REGULAR_USER_ID = 111
 ADMIN_USER_ID = 222
@@ -48,8 +44,7 @@
   mr.viewed_user_auth.effective_ids = {viewed_user_id}
   mr.viewed_user_auth.user_view = framework_views.UserView(viewed_user_pb)
   mr.viewed_user_name = viewed_user_name
-  mr.request = webapp2.Request.blank("/")
-  mr.request_path = mr.request.path
+  mr.request_path = '/'
   return mr
 
 
@@ -67,7 +62,7 @@
         usergroup=fake.UserGroupService(),
         project_star=fake.ProjectStarService(),
         user_star=fake.UserStarService())
-    self.servlet = userprofile.UserProfile('req', 'res', services=services)
+    self.servlet = userprofile.UserProfile(services=services)
 
     for user_id in (
         REGULAR_USER_ID, ADMIN_USER_ID, OTHER_USER_ID):
@@ -111,7 +106,7 @@
   def assertProjectsAnyOrder(self, value_to_test, *expected_project_names):
     actual_project_names = [project_view.project_name
                             for project_view in value_to_test]
-    self.assertItemsEqual(expected_project_names, actual_project_names)
+    six.assertCountEqual(self, expected_project_names, actual_project_names)
 
   def testGatherPageData_RegularUserViewingOtherUserProjects(self):
     """A user can see the other users' live projects, but not archived ones."""
@@ -125,13 +120,15 @@
                                 'other-owner-live')
     self.assertProjectsAnyOrder(page_data['committer_of_projects'],
                                 'other-member-live')
-    self.assertFalse(page_data['owner_of_archived_projects'])
+    self.assertProjectsAnyOrder(
+        page_data['owner_of_archived_projects'], 'other-owner-archived')
     self.assertEqual('ot...@xyz.com', page_data['viewed_user_display_name'])
     self.assertEqual(ezt.boolean(False), page_data['can_delete_user'])
     self.mock_guspd.assert_called_once_with(
         111, mr.viewed_user_auth.user_view, mr.viewed_user_auth.user_pb,
         None)
 
+  @pytest.mark.skip(reason='Test is flaky (https://crbug.com/monorail/12052)')
   def testGatherPageData_RegularUserViewingOwnProjects(self):
     """A user can see all their own projects: live or archived."""
     mr = MakeReqInfo(
diff --git a/sitewide/test/usersettings_test.py b/sitewide/test/usersettings_test.py
index dd7d252..5675846 100644
--- a/sitewide/test/usersettings_test.py
+++ b/sitewide/test/usersettings_test.py
@@ -1,13 +1,13 @@
-# 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 the user settings page."""
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
+import six
 import unittest
 
 try:
@@ -18,7 +18,7 @@
 from framework import framework_helpers
 from framework import permissions
 from framework import template_helpers
-from proto import user_pb2
+from mrproto import user_pb2
 from services import service_manager
 from sitewide import usersettings
 from testing import fake
@@ -58,10 +58,11 @@
     mr = testing_helpers.MakeMonorailRequest()
     page_data = self.servlet.GatherPageData(mr)
 
-    self.assertItemsEqual(
-        ['logged_in_user_pb', 'unified', 'user_tab_mode',
-         'viewed_user', 'offer_saved_queries_subtab', 'viewing_self'],
-        list(page_data.keys()))
+    six.assertCountEqual(
+        self, [
+            'logged_in_user_pb', 'unified', 'user_tab_mode', 'viewed_user',
+            'offer_saved_queries_subtab', 'viewing_self'
+        ], list(page_data.keys()))
     self.assertEqual(template_helpers.PBProxy(mr.auth.user_pb),
                      page_data['logged_in_user_pb'])
 
diff --git a/sitewide/test/userupdates_test.py b/sitewide/test/userupdates_test.py
index 725b123..d024755 100644
--- a/sitewide/test/userupdates_test.py
+++ b/sitewide/test/userupdates_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.sitewide.userupdates."""
 from __future__ import print_function
@@ -47,7 +46,7 @@
     self.mox.ResetAll()
 
   def testUserUpdatesProjects(self):
-    uup = userupdates.UserUpdatesProjects(None, None, self.services)
+    uup = userupdates.UserUpdatesProjects(self.services)
 
     self.mox.StubOutWithMock(sitewide_helpers, 'GetViewableStarredProjects')
     sitewide_helpers.GetViewableStarredProjects(
@@ -73,7 +72,7 @@
     self.assertEqual(uup._TAB_MODE, page_data['user_updates_tab_mode'])
 
   def testUserUpdatesDevelopers(self):
-    uud = userupdates.UserUpdatesDevelopers(None, None, self.services)
+    uud = userupdates.UserUpdatesDevelopers(self.services)
 
     self.mox.StubOutWithMock(self.services.user_star, 'LookupStarredItemIDs')
     self.services.user_star.LookupStarredItemIDs(
@@ -97,7 +96,7 @@
     self.assertEqual(uud._TAB_MODE, page_data['user_updates_tab_mode'])
 
   def testUserUpdatesIndividual(self):
-    uui = userupdates.UserUpdatesIndividual(None, None, self.services)
+    uui = userupdates.UserUpdatesIndividual(self.services)
 
     self.mox.StubOutWithMock(activities, 'GatherUpdatesData')
     activities.GatherUpdatesData(
