diff --git a/sitewide/custom_404.py b/sitewide/custom_404.py
index 397bd1d..557d1ff 100644
--- a/sitewide/custom_404.py
+++ b/sitewide/custom_404.py
@@ -15,8 +15,9 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import httplib
+from six.moves import http_client
 from framework import exceptions
+from framework import flaskservlet
 from framework import servlet
 
 
@@ -37,5 +38,8 @@
     if not mr.project_name:
       raise exceptions.InputException('No project specified')
     return {
-      'http_response_code': httplib.NOT_FOUND,
-      }
+        'http_response_code': http_client.NOT_FOUND,
+    }
+
+  # def Get404Page(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/groupadmin.py b/sitewide/groupadmin.py
index 32ba007..3e8bcce 100644
--- a/sitewide/groupadmin.py
+++ b/sitewide/groupadmin.py
@@ -13,6 +13,7 @@
 
 import ezt
 
+from framework import flaskservlet
 from framework import framework_helpers
 from framework import permissions
 from framework import servlet
@@ -121,3 +122,9 @@
       return framework_helpers.FormatAbsoluteURL(
           mr, '/g/%s%s' % (group_name, urls.GROUP_ADMIN),
           include_project=False, saved=1, ts=int(time.time()))
+
+  # def GetGroupAdmin(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostGroupAdmin(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/groupcreate.py b/sitewide/groupcreate.py
index 2dac146..ce0f151 100644
--- a/sitewide/groupcreate.py
+++ b/sitewide/groupcreate.py
@@ -11,7 +11,7 @@
 import logging
 import re
 
-from framework import exceptions
+from framework import exceptions, flaskservlet
 from framework import framework_helpers
 from framework import permissions
 from framework import servlet
@@ -102,3 +102,9 @@
       # Go to the new user group's detail page.
       return framework_helpers.FormatAbsoluteURL(
           mr, '/g/%s/' % group_id, include_project=False)
+
+  # def GetGroupCreate(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostGroupCreate(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/groupdetail.py b/sitewide/groupdetail.py
index b28baa9..4428a53 100644
--- a/sitewide/groupdetail.py
+++ b/sitewide/groupdetail.py
@@ -14,6 +14,7 @@
 import ezt
 
 from framework import exceptions
+from framework import flaskservlet
 from framework import framework_helpers
 from framework import framework_views
 from framework import paginate
@@ -189,6 +190,8 @@
     """
     # 1. Gather data from the request.
     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)
 
     if not remove_strs:
@@ -208,3 +211,9 @@
       return framework_helpers.FormatAbsoluteURL(
           mr, '/g/%s/' % mr.viewed_username, include_project=False,
           saved=1, ts=int(time.time()))
+
+  # def GetGroupDetail(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostGroupDetail(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/grouplist.py b/sitewide/grouplist.py
index 3adfaa3..57c46e9 100644
--- a/sitewide/grouplist.py
+++ b/sitewide/grouplist.py
@@ -13,7 +13,7 @@
 
 import ezt
 
-from framework import framework_helpers
+from framework import flaskservlet, framework_helpers
 from framework import permissions
 from framework import servlet
 from framework import urls
@@ -66,6 +66,8 @@
           'User is not permitted to delete groups')
 
     remove_groups = [int(g) for g in post_data.getall('remove')]
+    # TODO(crbug.com/monorail/10936): getall in Flask is getlist
+    # remove_groups = [int(g) for g in post_data.getlist('remove')]
 
     if not mr.errors.AnyErrors():
       self.services.usergroup.DeleteGroups(mr.cnxn, remove_groups)
@@ -76,3 +78,75 @@
       return framework_helpers.FormatAbsoluteURL(
           mr, '/g', include_project=False,
           saved=1, ts=int(time.time()))
+
+  # def GetGroupList(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostGroupList(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+
+class GroupDelete(flaskservlet.FlaskServlet):
+  """Shows a page with a simple form to create a user group."""
+
+  _PAGE_TEMPLATE = 'sitewide/group-list-page.ezt'
+
+  def AssertBasePermission(self, mr):
+    """Assert that the user has the permissions needed to view this page."""
+    super(GroupDelete, self).AssertBasePermission(mr)
+
+    if not mr.perms.HasPerm(permissions.VIEW_GROUP, None, None):
+      raise permissions.PermissionException(
+          'User is not allowed to view list of user groups')
+
+  def GatherPageData(self, mr):
+    """Build up a dictionary of data values to use when rendering the page."""
+    group_views = [
+        sitewide_views.GroupView(*groupinfo)
+        for groupinfo in self.services.usergroup.GetAllUserGroupsInfo(mr.cnxn)
+    ]
+    group_views.sort(key=lambda gv: gv.name)
+    offer_group_deletion = mr.perms.CanUsePerm(
+        permissions.DELETE_GROUP, mr.auth.effective_ids, None, [])
+    offer_group_creation = mr.perms.CanUsePerm(
+        permissions.CREATE_GROUP, mr.auth.effective_ids, None, [])
+
+    return {
+        'form_token':
+            xsrf.GenerateToken(mr.auth.user_id, '%s.do' % urls.GROUP_DELETE),
+        'groups':
+            group_views,
+        'offer_group_deletion':
+            ezt.boolean(offer_group_deletion),
+        'offer_group_creation':
+            ezt.boolean(offer_group_creation),
+    }
+
+  def ProcessFormData(self, mr, post_data):
+    """Process the posted form."""
+    if 'removebtn' in post_data:
+      return self.ProcessDeleteGroups(mr, post_data)
+
+  def ProcessDeleteGroups(self, mr, post_data):
+    """Process request to delete groups."""
+    if not mr.perms.CanUsePerm(permissions.DELETE_GROUP, mr.auth.effective_ids,
+                               None, []):
+      raise permissions.PermissionException(
+          'User is not permitted to delete groups')
+
+    remove_groups = [int(g) for g in post_data.getlist('remove')]
+
+    if not mr.errors.AnyErrors():
+      self.services.usergroup.DeleteGroups(mr.cnxn, remove_groups)
+
+    if mr.errors.AnyErrors():
+      self.PleaseCorrect(mr)
+    else:
+      return framework_helpers.FormatAbsoluteURL(
+          mr, '/g', include_project=False, saved=1, ts=int(time.time()))
+
+  def GetGroupDelete(self, **kwargs):
+    return self.handler(**kwargs)
+
+  def PostGroupDelete(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/sitewide/hostinghome.py b/sitewide/hostinghome.py
index 4a0a47d..b744935 100644
--- a/sitewide/hostinghome.py
+++ b/sitewide/hostinghome.py
@@ -14,16 +14,14 @@
 import settings
 from businesslogic import work_env
 from framework import exceptions
+from framework import flaskservlet
 from framework import permissions
-from framework import servlet
-from framework import template_helpers
 from framework import urls
 from project import project_views
 from sitewide import projectsearch
-from sitewide import sitewide_helpers
 
 
-class HostingHome(servlet.Servlet):
+class HostingHome(flaskservlet.FlaskServlet):
   """HostingHome shows the project list and link to create a project."""
 
   _PAGE_TEMPLATE = 'sitewide/hosting-home-page.ezt'
@@ -105,3 +103,6 @@
     project_url = '/p/%s' % project_name
     self.redirect(project_url, abort=True)
     return 'Redirected to %r' % project_url
+
+  def GetOldHostingHome(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/sitewide/moved.py b/sitewide/moved.py
index 3f63d24..968422c 100644
--- a/sitewide/moved.py
+++ b/sitewide/moved.py
@@ -13,7 +13,7 @@
 
 import logging
 
-from framework import exceptions
+from framework import exceptions, flaskservlet
 from framework import framework_helpers
 from framework import servlet
 from framework import urls
@@ -60,3 +60,6 @@
         'project_name': mr.specified_project,
         'moved_to_url': moved_to_url,
         }
+
+  # def GetProjectMoved(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/projectcreate.py b/sitewide/projectcreate.py
index 83862f6..c3f8cca 100644
--- a/sitewide/projectcreate.py
+++ b/sitewide/projectcreate.py
@@ -15,7 +15,7 @@
 
 import settings
 from businesslogic import work_env
-from framework import exceptions
+from framework import exceptions, flaskservlet
 from framework import filecontent
 from framework import framework_helpers
 from framework import gcs_helpers
@@ -155,3 +155,9 @@
       # Go to the new project's introduction page.
       return framework_helpers.FormatAbsoluteURL(
           mr, urls.ADMIN_INTRO, project_name=project_name)
+
+  # def GetCreateProject(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostCreateProject(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/test/custom_404_test.py b/sitewide/test/custom_404_test.py
index 71b52f8..b47501d 100644
--- a/sitewide/test/custom_404_test.py
+++ b/sitewide/test/custom_404_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
 
 from framework import exceptions
@@ -39,6 +39,4 @@
     _, mr = testing_helpers.GetRequestObjects(path='/p/proj/junk')
 
     page_data = self.servlet.GatherPageData(mr)
-    self.assertEqual(
-      {'http_response_code': httplib.NOT_FOUND},
-      page_data)
+    self.assertEqual({'http_response_code': http_client.NOT_FOUND}, page_data)
diff --git a/sitewide/test/hostinghome_test.py b/sitewide/test/hostinghome_test.py
index f51c9ec..de125a5 100644
--- a/sitewide/test/hostinghome_test.py
+++ b/sitewide/test/hostinghome_test.py
@@ -47,7 +47,7 @@
     self.project_a = self.services.project.TestAddProject('a', project_id=1)
     self.project_b = self.services.project.TestAddProject('b', project_id=2)
 
-    self.servlet = hostinghome.HostingHome('req', 'res', services=self.services)
+    self.servlet = hostinghome.HostingHome(services=self.services)
     self.mr = testing_helpers.MakeMonorailRequest(user_info={'user_id': 111})
 
     self.orig_pipeline_class = projectsearch.ProjectSearchPipeline
diff --git a/sitewide/test/userprofile_test.py b/sitewide/test/userprofile_test.py
index b830fb7..b4e29d8 100644
--- a/sitewide/test/userprofile_test.py
+++ b/sitewide/test/userprofile_test.py
@@ -49,6 +49,7 @@
   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
   return mr
 
 
diff --git a/sitewide/userclearbouncing.py b/sitewide/userclearbouncing.py
index 3decdf4..0ae5f4a 100644
--- a/sitewide/userclearbouncing.py
+++ b/sitewide/userclearbouncing.py
@@ -12,6 +12,7 @@
 import time
 
 from framework import framework_helpers
+from framework import flaskservlet
 from framework import permissions
 from framework import servlet
 from framework import timestr
@@ -60,3 +61,9 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, mr.viewed_user_auth.user_view.profile_url, include_project=False,
         saved=1, ts=int(time.time()))
+
+  # def GetUserClearBouncingPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostUserClearBouncingPage(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/userprofile.py b/sitewide/userprofile.py
index bf68c5f..2723e9e 100644
--- a/sitewide/userprofile.py
+++ b/sitewide/userprofile.py
@@ -17,6 +17,7 @@
 import settings
 from businesslogic import work_env
 from framework import framework_helpers
+from framework import flaskservlet
 from framework import framework_views
 from framework import permissions
 from framework import servlet
@@ -146,9 +147,9 @@
     ban_token = None
     ban_spammer_token = None
     if mr.auth.user_id and can_ban:
-      form_token_path = mr.request.path + 'ban.do'
+      form_token_path = mr.request_path + 'ban.do'
       ban_token = xsrf.GenerateToken(mr.auth.user_id, form_token_path)
-      form_token_path = mr.request.path + 'banSpammer.do'
+      form_token_path = mr.request_path + 'banSpammer.do'
       ban_spammer_token = xsrf.GenerateToken(mr.auth.user_id, form_token_path)
 
     can_delete_user = permissions.CanExpungeUsers(mr)
@@ -230,6 +231,12 @@
         mr, mr.viewed_user_auth.user_view.profile_url, include_project=False,
         saved=1, ts=int(time.time()))
 
+  # def GetUserProfilePage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
+  # def PostUserProfilePage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
 
 def _ComputePossibleParentAccounts(
     we, user_view, linked_parent, linked_children):
@@ -245,13 +252,6 @@
   found_emails = [user.email for user in found_users]
   return found_emails
 
-
-class UserProfilePolymer(UserProfile):
-  """New Polymer version of user profiles in Monorail."""
-
-  _PAGE_TEMPLATE = 'sitewide/user-profile-page-polymer.ezt'
-
-
 class BanUser(servlet.Servlet):
   """Bans or un-bans a user."""
 
@@ -269,3 +269,6 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, mr.viewed_user_auth.user_view.profile_url, include_project=False,
         saved=1, ts=int(time.time()))
+
+  # def PostBanUserPage(self, **kwargs):
+  #   return self.handler(**kwargs)
diff --git a/sitewide/usersettings.py b/sitewide/usersettings.py
index bb65ddd..8484afc 100644
--- a/sitewide/usersettings.py
+++ b/sitewide/usersettings.py
@@ -9,7 +9,7 @@
 from __future__ import absolute_import
 
 import time
-import urllib
+from six.moves import urllib
 
 import ezt
 
@@ -63,3 +63,13 @@
         saved=1, ts=int(time.time()))
 
     return url
+
+  # pylint: disable=unused-argument
+  def GetUserSetting(self, **kwargs):
+    return
+    # return self.handler(**kwargs)
+
+  # pylint: disable=unused-argument
+  def PostUserSetting(self, **kwargs):
+    return
+    # return self.handler(**kwargs)
diff --git a/sitewide/userupdates.py b/sitewide/userupdates.py
index ac44c0f..b970614 100644
--- a/sitewide/userupdates.py
+++ b/sitewide/userupdates.py
@@ -22,6 +22,7 @@
 from businesslogic import work_env
 from features import activities
 from framework import servlet
+from framework import flaskservlet
 from framework import urls
 from sitewide import sitewide_helpers
 
@@ -87,6 +88,9 @@
           viewed_user_id=mr.viewed_user_auth.user_id)
     return [project.project_id for project in starred_projects]
 
+  # def GetUserUpdatesProjectsPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
 
 class UserUpdatesDevelopers(AbstractUserUpdatesPage):
   """Shows a page of updates from developers starred by a user."""
@@ -104,6 +108,9 @@
     logging.debug('StarredUsers: %r', user_ids)
     return user_ids
 
+  # def GetUserUpdatesDevelopersPage(self, **kwargs):
+  #   return self.handler(**kwargs)
+
 
 class UserUpdatesIndividual(AbstractUserUpdatesPage):
   """Shows a page of updates initiated by a user."""
@@ -116,3 +123,6 @@
   def _GetUserIDsForUpdates(self, mr):
     """Returns a list of user IDs whom to retrieve activities from."""
     return [mr.viewed_user_auth.user_id]
+
+  # def GetUserUpdatesPage(self, **kwargs):
+  #   return self.handler(**kwargs)
