diff --git a/tracker/issueadmin.py b/tracker/issueadmin.py
index 10fbdc8..849e59f 100644
--- a/tracker/issueadmin.py
+++ b/tracker/issueadmin.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 issue tracker configuration.
 
@@ -14,18 +13,12 @@
 from __future__ import absolute_import
 
 import collections
-import itertools
 import logging
 import time
 
-import ezt
-
 from features import filterrules_helpers
 from features import filterrules_views
 from features import savedqueries_helpers
-from framework import authdata
-from framework import flaskservlet
-from framework import framework_bizobj
 from framework import framework_constants
 from framework import framework_helpers
 from framework import framework_views
@@ -33,8 +26,7 @@
 from framework import permissions
 from framework import servlet
 from framework import urls
-from proto import tracker_pb2
-from tracker import field_helpers
+from mrproto import tracker_pb2
 from tracker import tracker_bizobj
 from tracker import tracker_constants
 from tracker import tracker_helpers
@@ -44,7 +36,7 @@
 class IssueAdminBase(servlet.Servlet):
   """Base class for servlets allowing project owners to configure tracker."""
 
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PROCESS
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PROCESS
   _PROCESS_SUBTAB = None  # specified in subclasses
 
   def GatherPageData(self, mr):
@@ -63,12 +55,19 @@
     labels_text = tracker_views.LabelDefsAsText(config)
 
     return {
-        'admin_tab_mode': self._PROCESS_SUBTAB,
-        'config': config_view,
-        'open_text': open_text,
-        'closed_text': closed_text,
-        'labels_text': labels_text,
-        }
+        'admin_tab_mode':
+            self._PROCESS_SUBTAB,
+        'config':
+            config_view,
+        'open_text':
+            open_text,
+        'closed_text':
+            closed_text,
+        'labels_text':
+            labels_text,
+        'can_edit_project':
+            permissions.CanEditProjectConfig(mr, self.services) or None,
+    }
 
   def ProcessFormData(self, mr, post_data):
     """Validate and store the contents of the issues tracker admin page.
@@ -91,7 +90,7 @@
   """Servlet allowing project owners to configure well-known statuses."""
 
   _PAGE_TEMPLATE = 'tracker/admin-statuses-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_STATUSES
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_STATUSES
 
   def ProcessSubtabForm(self, post_data, mr):
     """Process the status definition section of the admin page.
@@ -103,7 +102,7 @@
     Returns:
       The URL of the page to show after processing.
     """
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'Only project owners may edit the status definitions')
 
@@ -142,18 +141,18 @@
 
     return urls.ADMIN_STATUSES
 
-  # def GetAdminStatusesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminStatusesPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminStatusesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminStatusesPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class AdminLabels(IssueAdminBase):
   """Servlet allowing project owners to labels and fields."""
 
   _PAGE_TEMPLATE = 'tracker/admin-labels-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_LABELS
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_LABELS
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page.
@@ -186,7 +185,7 @@
     Returns:
       The URL of the page to show after processing.
     """
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'Only project owners may edit the label definitions')
 
@@ -231,18 +230,18 @@
 
     return urls.ADMIN_LABELS
 
-  # def GetAdminLabelsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminLabelsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminLabelsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminLabelsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class AdminTemplates(IssueAdminBase):
   """Servlet allowing project owners to configure templates."""
 
   _PAGE_TEMPLATE = 'tracker/admin-templates-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_TEMPLATES
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_TEMPLATES
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page.
@@ -265,7 +264,7 @@
     Returns:
       The URL of the page to show after processing.
     """
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'Only project owners may edit the default templates')
 
@@ -301,18 +300,18 @@
     return (GetSelectedTemplateID('default_template_for_developers'),
             GetSelectedTemplateID('default_template_for_users'))
 
-  # def GetAdminTemplatesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminTemplatesPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminTemplatesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminTemplatesPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class AdminComponents(IssueAdminBase):
   """Servlet allowing project owners to view the list of components."""
 
   _PAGE_TEMPLATE = 'tracker/admin-components-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_COMPONENTS
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_COMPONENTS
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page.
@@ -389,7 +388,7 @@
 
     for component_def in component_defs:
       allow_edit = permissions.CanEditComponentDef(
-          mr.auth.effective_ids, mr.perms, mr.project, component_def, config)
+          mr, self.services, component_def, config)
       if not allow_edit:
         perm_errors.append(component_def.path)
 
@@ -417,18 +416,18 @@
         failed_templ=','.join(templates_errors),
         deleted=','.join(deleted_components))
 
-  # def GetAdminComponentsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminComponentsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminComponentsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminComponentsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class AdminViews(IssueAdminBase):
   """Servlet for project owners to set default columns, axes, and sorting."""
 
   _PAGE_TEMPLATE = 'tracker/admin-views-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_VIEWS
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_VIEWS
 
   def GatherPageData(self, mr):
     """Build up a dictionary of data values to use when rendering the page.
@@ -466,7 +465,7 @@
     Returns:
       The URL of the page to show after processing.
     """
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'Only project owners may edit the default views')
     existing_queries = savedqueries_helpers.ParseSavedQueries(
@@ -488,11 +487,11 @@
 
     return urls.ADMIN_VIEWS
 
-  # def GetAdminViewsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminViewsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminViewsPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminViewsPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 def _ParseListPreferences(post_data):
@@ -540,7 +539,7 @@
   """Servlet allowing project owners to configure filter rules."""
 
   _PAGE_TEMPLATE = 'tracker/admin-rules-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_RULES
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_RULES
 
   def AssertBasePermission(self, mr):
     """Check whether the user has any permission to visit this page.
@@ -549,7 +548,7 @@
       mr: commonly used info parsed from the request.
     """
     super(AdminRules, self).AssertBasePermission(mr)
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'User is not allowed to administer this project')
 
@@ -617,8 +616,8 @@
 
     return urls.ADMIN_RULES
 
-  # def GetAdminRulesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetAdminRulesPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostAdminRulesPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostAdminRulesPage(self, **kwargs):
+    return self.handler(**kwargs)
